您的位置:首页 > 理论基础 > 计算机网络

tensorflow:2)卷积神经网络基础

2017-06-01 08:31 302 查看
其实非常想总结下CS231n的课程,尤其是lecture7,对卷积神经网络剖析得入木三分,但是发现有道友已对该系列的课程进行了详细的分析,想写的东西都已经被他写完了O(∩_∩)O~~

另附上教程中卷积网络的动画,非常形象:http://cs231n.github.io/convolutional-networks/#overview

课程PPT和视频链接: https://pan.baidu.com/s/1c2H2k9a 密码: ye4n


Convolution Layer(卷积层)



哈哈,先贴出张卷积层的工作原理图。假设我们接收到的图片式32×32×3的图片,长为32,宽为32,3代表是rgb三通道,右侧有个小长方体,尺寸为5×5×3,5×5代表的是卷积核的大小,有些时候也称卷积核为滤波器,这些说法都是通用的,值得注意的是卷积核的第三个维度应该和输入的第三个维度相同,在这里都是3。通常情况下,我们在代码中定义的时候都是直接说卷积核大小为5×5,不会特意去提及第三个维度,是因为第三个维度是已知的,因为这个问题LZ之前还纠结了好久,因为LZ傻傻的以为卷积核是个二维的/(ㄒoㄒ)/~~



把卷积核定义好了,接下来我们要怎么办呢?定义好卷积核,卷积核和图片中对应的部分进行点乘,最后在加上个bias(偏置),得到一个下层神经元的结果,如果上面的话很难理解的话,小伙伴可以这样想,把图片取5×5的大小,这个大小是要取遍整幅图片的,然后对与每个5×5×3的三维矩阵中的每个元素赋予一定的权重,也就是对其进行加权求和在加上一个bias,最后得到一个数值。一个卷积核就会得到一个激活图,如果我们有第二个卷积核,那就会得到第二个绿色的激活图。



我们可以把我们学到的特征进行可视化,可以看到最开始的特征都是一些边缘信息,中间的特征会出现圆形的轮子之类的稍微复杂的特征,到最后更加高级抽象的图案。这是因为我们每次做卷积相当于对特征的进一步融合,最后产生的特征也是极度抽象的,卷积核还是个抽象派画家?这就和人的神经元也是类似的,最开始只能感觉到边缘和角点这些初级简单的特征,通过层级结构,中等的神经元可以感觉到圆形,方形等这些稍复杂的特征,最后也是进行进一步的特征提取,认识到更高级的特征。



我们以上图为例,假设上图就是一个简单的二维图片7×7,卷积核的尺寸为3×3,那么可以很简单的得到输出为5×5的激活图。这个算是小学奥数吧,在上图中一共可以找到25个3×3的正方形。

那么加一些难度,如果步长为stride = 2呢?得到的激活图大小为3×3。

那么如果步长为3呢?课程中为了简便考虑,对这种无法整除的例子不予考虑。



上图给出了计算公式,对于特别大的输入,不能总是依靠手动来计算激活图的大小,还是记住公式比较方便。



在实际情况下:在边界补0是一个非常常见的技术,为什么要对输入的图像进行补0操作呢?上面我们计算了经过卷积核卷积后除非卷积核大小为1,步长也为1,不然的话,图像肯定会越变越小的。为了保持卷积前后图片的大小,这里的大小仅仅是指第一维、第二维的大小,不是指纵向的第三个维度。

这里我们还提到了一个1×1的卷积核,那么问题来了,这个1×1的卷积核有什么用呢?我们知道有几个卷积核就会产生几层的激活图,也或者叫做feature map(特征图,可能这个叫法更加常见),那么经过一次卷积后得到的feature map在第二次卷积的时候,第三个维度就是第一次卷积核的次数。同理,如果我们只想改变得到的特征图的第三个个维度就是使用1×1的卷积核,相当于可以对其进行升降维。同时也可以对跨通道的信息进行融合,得到更加抽象的特征。

总结,我就不多解释了,之前都提及过了。





如果人脑的角度来进行考虑,可以考虑以下LZ之前讲Sigmoid课程时候的例子,卷积层的工作原理也是很类似的。


Pooling Layer(池化层) 



从上图可以直观的看到池化层其实就是让表达更加的小一些,同时池化也是丢掉了部分空间信息。池化也有种说法叫做下采样,就是在已经得到的特征按照一定的规定进行采样。



课程中介绍的是最大池化,当然也有其它池化方法如平均池化,在池化层是不需要引入新的参数的,仅仅是对特征的进一步抽取简化。

下图就是对池化层的总结,也不用赘述了。




Fully Connected Layer(FC layer,全连接层) 

以之前的7×7的图片,在实际中会把它拉成一个49×1的向量,如果设置了10个神经元,那么49个输入就会分别乘以一个权重再加上一个偏置把最后得到的结果输出到第一个神经元。这就是全连接层,如果是100×100×3,那么就要拉成一个30000的向量,在设置1000个神经元,那么权重的量就是很巨大的了,所以,之后也有人提出了全卷积层的网络来减少参数。

好啦,卷积神经网络的基本概念都介绍完啦,课程最后介绍了几个常见网络,因为LZ的tensorflow实战系列里面都已经讲解过啦,这里就不在说一遍了O(∩_∩)O

转载自http://blog.csdn.net/Felaim/article/details/71404127
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息