池化层
卷积层对于位置是非常敏感的!
这里用检测垂直边缘作为例子,有的时候卷积对位置太敏感也不是好事,比如拍照的时候手抖之类的,边缘就不会那么整齐,所以有时候我们是需要一定程度的平移不变形的。
池化操作也是使用滑动窗口来取值。
上面实际上是没有padding的,所以大小不一致。其实应该是要padding的,让池化过后的feature_map大小保持不变。
最大池化可以降低卷积对位置敏感信息,比如上图经过池化操作,垂直边缘检测就可以容纳1像素的“错位”。
在多通道上,池化和卷积不一样在于,池化是每个通道做一个池化,但是并不会去做进行通道的融合,而卷积是会进行多通道融合的。(为什么池化层不进行多通道融合呢?因为多通道融合的事情可以交给卷积来做,那么池化层也就没有必要做了)
池化和卷积一样,也有padding和stride这两个超参数,但是不同的是池化层没有需要学习的参数。
最大池化层输出的每个窗口中最强的那个信号。
平均池化层就是输出每个窗口平均的信号强度,有一点点“抹平”的成分。
最大池化层和平均池化层都是非常常用的操作。
代码实现
QA
- 池化层一般都是放在卷积层的后面?可以放在卷积层的前面吗?
一般池化层都是放在卷积层的后面的,因为池化的意义就是为了降低卷积对位置的敏感度,使得像素附近的值都可以弄出来。
- 池化窗口有重叠与没有重叠影响如何?
沐神认为问题不大。
而且现在池化层用的是越来越少,当然这个只是我们还是要讲的。
- 为什么有的padding是一个数,有的padding是一个元组?
如果是一个数的话,表示长和宽都是一样的。如果是一个元组,则表示是分别赋值了不同的长宽。
- 池化层后计算量是不是减少了?
如果stride=2,那么计算量是减少一半的;但是如果加了padding,而且stride=1,那么其实计算量是没有改变的。
所以加了池化后,计算量可能减少,也可能不变。
- 为什么现在池化层用的越来越少了?
池化层的作用:
- stride=2,这样可以减少一半的计算量。
但是其实卷积也可也进行stride=2的操作,所以其实这步可以在卷积中进行替代。
- 减少卷积对位置的敏感度
其实现在我们会对图片大量做数据增强,我们会对图片进行移动,放大,缩小,扰动,使得卷积神经网络本身看到的数据就是有很多变化的,这里也降低了池化层的作用。
但是最后的最后,池化层还有一个作用就是把值变成一个单数字。