用卷积代替池化

前言

还是因为毕设,计划对于池化进行优化,思路是用步长为2的卷积代替池化,先让我们讲一讲他们分别的原理。

池化

先给一个池化的函数:

def max_pool_2x2(x):
    return tf.nn.max_pool(x,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME')

池化作用:对输入的特征图进行压缩,一方面使特征图变小,简化网络计算复杂度;一方面进行特征压缩,提取主要特征。但是我在网上找到了其他说法:池化层的主要作用有三个:1. 增加CNN特征的平移不变性。2. 池化的降采样使得高层特征具有更大的感受野。 3. 池化的逐点操作相比卷积层的加权和更有利于优化求解。
首先让我们看池化是如何操作吧:
用卷积代替池化_第1张图片
这是我们常用的最大池化,其实就是在四个像素点中选取1个最大的。在我看来相对于平均池化,最大池化更适合第二种说法。很合适三种说法。(这里平均池化就不做介绍,因为不常用)但是,在这种说紧跟一句话:实验证明1,3对性能的作用较小。以关键性较大的2来说: avg-pooling就是一般的平均滤波卷积操作,而max-pooling操作引入了非线性,可以用stride=2的CNN+RELU替代,性能基本能够保持一致,甚至稍好。已经有最新的一些网络结构去掉了pooling层用步长为2的卷积层代替。那么我们看看卷积是否可以实现代替。

卷积

首先我们看一下卷积的输出如何计算:

N = (W − F + 2P )/S+1

假设原图片是88,padding为0卷积核为22,步长为2,那么输出特征图是多少?是4*4.
所以卷积可以实现池化的缩小特征图大小,然后是非线性这一点RELU可以很好地解决。

最后

所以我们的结论是什么呢?就是卷积+RELU可以很好地代替池化。当然这是这也是指在一定情况下,读者如果想代替的话可以自己试验一下。

你可能感兴趣的:(卷积神经网络)