【Tensorflow】卷积神经网络(CNN)中Pooling层的种类介绍及函数使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/StupidAutofan/article/details/79150012

前言

深度神经网络中,最主要的结构就是逐层交替出现的卷基层和pooling层(池化层),卷积层主要用来提取特征,而pooling层主要用来对卷积的结果进行降维,其实也就相当于对图像进行下采样。
卷积神经网络中,按照下采样的方法,pooling操作可以分为Max-pooling(基于最大值池化)、Average-pooling(均值池化)和Stochastic-pooling(随机池化)。在tensorflow中,我们可以直接调用pooling函数,本文将介绍tensorflow中不同的pooling函数使用方法以及其参数定义。

  • 前言
  • Max-pooling(基于最大值池化)
  • Average-pooling(均值池化)
  • Stochastic-pooling(随机池化)

一、Max-pooling(基于最大值池化)

假设池化窗口的尺寸为 n n ,最大值池化是返回池化窗口内的最大值。

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来源:知乎,点此处链接

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

猜你喜欢

转载自blog.csdn.net/StupidAutofan/article/details/79150012
今日推荐