前言
深度神经网络中,最主要的结构就是逐层交替出现的卷基层和pooling层(池化层),卷积层主要用来提取特征,而pooling层主要用来对卷积的结果进行降维,其实也就相当于对图像进行下采样。
卷积神经网络中,按照下采样的方法,pooling操作可以分为Max-pooling(基于最大值池化)、Average-pooling(均值池化)和Stochastic-pooling(随机池化)。在tensorflow中,我们可以直接调用pooling函数,本文将介绍tensorflow中不同的pooling函数使用方法以及其参数定义。
- 前言
- Max-pooling(基于最大值池化)
- Average-pooling(均值池化)
- Stochastic-pooling(随机池化)
一、Max-pooling(基于最大值池化)
假设池化窗口的尺寸为 ,最大值池化是返回池化窗口内的最大值。
def max_pool_2x2(x):
return tf.nn.max_pool(x, ksize=[1, 2, 2, 1],
strides=[1, 2, 2, 1], padding='SAME')
代码来源:tensorflow中文社区, 该代码池化用简单传统的2x2大小的模板做max pooling.
tf.nn.max_pooling(value, ksize, strides, padding) 参数定义如下:
value 为输入,即待pooling的图片,一般情况下为上一层卷积输出的feature map,即四维张量[batch , height , width , channel];1
ksize 为窗口大小,是个四维向量,其中中间两位分别为窗口的高和宽,边上两位一般为1,即[1, height, width, 1] ;
strides 为窗口的滑动步长,也是四维向量,第二、三项分别对应在数值与水平方向的步长;一、四为分别对应在batch内与channel间的移动步长,所以一般取1.
padding 表示边缘是否填充。在处理边缘像素值时,窗口有一部分可能会在图像外,所以padding=’SAME’表示在边上补0; padding=’VALID’ 表示删掉会导致窗口不足的那一行或列。2
二、Average-pooling(均值池化)
均值池化即对邻域内特征点只求平均。tensorflow中的函数定义为:
tf.nn.avg_pooling(value, ksize, strides, padding)
具体的参数与max-pooling的基本相同,所以不再赘述。
三、Stochastic-pooling(随机池化)
tensorflow先有的函数只有maxpooling和averagepooling两种,在查找资料的时候,知乎上有人提到了Stochastic-pooling(随机池化),所以在此引用知乎。3
根据相关理论,特征提取的误差主要来自两个方面:
(1)邻域大小受限造成的估计值方差增大;
(2)卷积层参数误差造成估计均值的偏移。一般来说,average-pooling能减小第一种误差,更多的保留图像的背景信息,max-pooling能减小第二种误差,更多的保留纹理信息。
Stochastic-pooling则介于两者之间,通过对像素点按照数值大小赋予概率,再按照概率进行亚采样,在平均意义上,与average-pooling近似,在局部意义上,则服从max-pooling的准则。Stochastic-pooling来源:知乎,点此处链接