CNN卷积神经网络问题处理记录(李宏毅老师CNN视频)
(注:以下截图均来自台湾大学李宏毅老师的课程PPT)
指路视频:https://www.bilibili.com/video/BV1JE411g7XF?p=17
博主刚接触CNN不久,本篇算是自己看了李宏毅老师CNN课程视频的学习记录吧,基本流程就没怎么写了,主要是自己看完视频解决的疑惑。下列表述如有错误的,欢迎大家指正!
问题一:CNN中的卷积核是怎么设置的?为什么?
CNN卷积核的设计-1联想空间滤波器遍历全图实现滤波效果的过程,模板(卷积核)相当于一个系统的冲激响应,作用于不同的像素点(输入)会有不同的输出(内积值)。而在此处,如右图所示的Filter-1, 其只有主对角线上的值全为1,目的是为了检测有没有主对角线这样的一个特征,如果有的话,如图中放置在第一个位置,得到的内积为1×1+1×1+1×1=3,3也是该卷积核遍历过程中所能得到的最大内积值(因为只要其他位置有数值,根据Filter-1的设置,就会减去一定的值,这样总值必然会比3小)。这也就验证了“长得越像,内积越大”的道理。这样就能检测出特征(此处为主对角线)了。对于其他特征卷积核的设计也是一样的道理。
CNN卷积核的设计-2
该图检测的是另一个特征,最大值3出现在右下角,这样就说明在右下角处有存在这个卷积核(垂直线)的特征。卷积之后得到的新矩阵也称为Feature Map(特征图),通过Feature Map我们可以知道该图像具有的特征及其所在位置。一个卷积核对原图进行遍历可以得到一个特征图,如果有100个卷积核则可以得到100个特征图。
CNN卷积核设计-3
对于多通道的图像,其遍历的卷积核的通道数也要和图像的通道数一样,但是每一层卷积核矩阵值的设计都是一样的,因为不同通道只是代表的颜色不同,其特征还是不变的,所以如上图,要检测的是垂直的直线,每一层的矩阵值(上图三通道 有三层)都是一样的。(特征矩阵是固定的)。而在遍历的时候,就是每一层的内积相加作为该位置的值。
这里有一个还未明白的问题,就是第一层卷积的意义按照上面的解释是可以理解的,但是第二层卷积第三层卷积呢,在之前特征图上继续做操作,这里还是不太理解。
问题二:如何理解卷积层和全连接层的关系
卷积层和全连接层的联系简单来说,在CNN中,卷积层负责把图像的特征提取出来,然后把这些特征输送到全连接层进行,通过全连接层不断地强化特征最终可以得到该图像物体所属的类别。这里不得不再次感叹李宏毅老师讲的是真的好,老师说,其实卷积层就是丢了某些参数的全连接层的一部分。
将卷积层用全连接层的视角来看
如上图,将尺寸为6×6的图像像素展开(flatten)为一维向量,根据求内积的过程可知,每一个像素点都乘了卷积核中对应位置的参数,最终相加得到第一个神经元的值——3.而卷积核的参数不就是全连接网络中每条连接线的参数吗。只不过对于这个过程,并不是“全连接”,第一个神经元其实只连接到9个像素点。所以说卷积层就是丢了某些参数的全连接层的一部分。此外,原本在全连接层中每个神经元都会有独立的权值,但是在这里,不同的神经元共享权值。如下图所示,第二个神经元的值也是用刚才的一组权值得到的。
不同的神经元共享权值
图记:
卷积网络输出特征图,然后flatten之后输入全连接网络
flatten示意图
CNN用Keras实现流程及对应代码
卷积过程示意图
图解:
第一次卷积:25个卷积核 每个卷积核3×3,输入图片大小1个通道,尺寸是28×28
第一次池化:表示每2×2的块作为一个“池”合并为一个值
第二次卷积:50个卷积核,每个卷积核3×3,(系统会自动补上通道数,不需特地说明,此时的通道已经变成25了)
第二次池化:表示每2*2的块作为一个“池”合并为一个值
第一次只有一个通道,所以参数数为3×3×1=9
第二次输入图像有25个通道,所以参数数为3×3×25=225 CNN全过程流程图
对于这个视频,我在复习的时候搞明白了上面的这些点。对于CNN的全过程还有一些没有完全理解的,不过今天就先记到这里吧,还是得再去看看李宏毅老师的课。
有什么表述有误的,请大家多多指正!