CNN中难点分析--对卷积层(Convolution)与池化层(Pooling)的理解

在这里插入图片描述
传统机器学习通过特征工程提取特征,作为Input参数进行输入,从而拟合一个相对合适的w参数,而CNN利用卷积层感知局部特征,然后更高层次对局部进行综合操作,从而得到全局信息,池化层层提取主要特征,从而自动提取特征。

1、池化层的理解

pooling池化的作用则体现在降采样:保留显著特征、降低特征维度,增大kernel的感受野。另外一点值得注意:pooling也可以提供一些旋转不变性。

池化层可对提取到的特征信息进行降维,一方面使特征图变小,简化网络计算复杂度并在一定程度上避免过拟合的出现;一方面进行特征压缩,提取主要特征。
  最大池采样在计算机视觉中的价值体现在两个方面:(1)、它减小了来自上层隐藏层的计算复杂度;(2)、这些池化单元具有平移不变性,即使图像有小的位移,提取到的特征依然会保持不变。由于增强了对位移的鲁棒性,这样可以忽略目标的倾斜、旋转之类的相对位置的变化,以此提高精度,最大池采样方法是一个高效的降低数据维度的采样方法。
  需要注意的是:这里的pooling操作是特征图缩小,有可能影响网络的准确度,因此可以通过增加特征图的深度来弥补(这里的深度变为原来的2倍)。

在CNN网络中卷积池之后会跟上一个池化层,池化层的作用是提取局部均值与最大值,根据计算出来的值不一样就分为均值池化层与最大值池化层,一般常见的多为最大值池化层。池化的时候同样需要提供filter的大小、步长。

tf.nn.max_pool(value, ksize, strides, padding, name=None)

参数是四个,和卷积很类似:

第一个参数value:需要池化的输入,一般池化层接在卷积层后面,所以输入通常是feature map,依然是[batch, height, width, channels]这样的shape

第二个参数ksize:池化窗口的大小,取一个四维向量,一般是[1, height, width, 1],因为我们不想在batch和channels上做池化,所以这两个维度设为了1

第三个参数strides:和卷积类似,窗口在每一个维度上滑动的步长,一般也是[1, stride,stride, 1]

第四个参数padding:和卷积类似,可以取’VALID’ 或者’SAME’

返回一个Tensor,类型不变,shape仍然是[batch, height, width, channels]这种形式

举例:池化输出特征图计算和卷积计算公式相同,区别是池化是求卷积区域中的max,不涉及卷积计算。

1)pooling(kernel size 2×2,padding 0,stride 232*32*16->pooling之后(32-2+0/2 + 1 =16*16

     pool3 = tf.nn.max_pool(layer3,[1,2,2,1],[1,2,2,1],padding='SAME')    // p = (f-1)/2=(2-1)/2=0,,所以padding='SAME'或“VALID”输出一样2)pooling(kernel size 3×3,padding 0,stride 132*32*16->pooling之后(32-3+0/1 + 1 = 30*30

    pool3 = tf.nn.max_pool(layer3,[1,3,3,1],[1,1,1,1])   

2、padding的理解

之前在讨论卷积神经网络的时候,我们是使用filter来做元素乘法运算来完成卷积运算的。目的是为了完成探测垂直边缘这种特征。但这样做会带来两个问题。

卷积运算后,输出图片尺寸缩小;
越是边缘的像素点,对于输出的影响越小,因为卷积运算在移动的时候到边缘就结束了。中间的像素点有可能会参与多次计算,但是边缘像素点可能只参与一次。所以我们的结果可能会丢失边缘信息。
  那么为了解决这个问题,我们引入padding, 什么是padding呢,就是我们认为的扩充图片, 在图片外围补充一些像素点,把这些像素点初始化为0.

padding的用途:

(1)保持边界信息,如果没有加padding的话,输入图片最边缘的像素点信息只会被卷积核操作一次,但是图像中间的像素点会被扫描到很多遍,那么就会在一定程度上降低边界信息的参考程度,但是在加入padding之后,在实际处理过程中就会从新的边界进行操作,就从一定程度上解决了这个问题。

(2)可以利用padding对输入尺寸有差异图片进行补齐,使得输入图片尺寸一致。

(3)卷积神经网络的卷积层加入Padding,可以使得卷积层的输入维度和输出维度一致。

(4)卷积神经网络的池化层加入Padding,一般都是保持边界信息和

padding模式:SAME和VALID

SAME:是填充,填充大小, p = (f-1)/2;VALID:是不填充,直接计算输出。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章