在卷积神经网络中,卷积层之间往往会加上一个池化层(pooling layer)。池化层可以非常有效的缩小矩阵的尺寸,从而减少最后全连接层中的参数。
池化层的前向传播的过程也是通过移动一个类似卷积层过滤器的结构完成的,不过池化层过滤器中的计算不是节点的加权和,而是采用更加简单的最大值或者平均运算,进一步缩小矩阵的尺寸。使用得最多得池化层结构是最大池化层,使用平均值操作的池化层被称之为平均池化层(average pooling),其他池化层在实践中用的比较少。
与卷积层的过滤器类似,池化层的过滤器也需要人工设定过滤器尺寸、是否使用全0填充以及过滤器移动的步长等设置,这些设置的意义和卷积层的设置是一样的。
下面代码实现了最大池化层的前向传播算法
import tensorflow as tf
pool = tf.nn.max_pool(
active_conv, ksize=[1, 3, 3, 1], strides=[1, 2, 2, 1], padding='SAME')
tf.nn.max_pool实现了前向传播过程,ksize提供了过滤器的尺寸(使用的最多的是[1,2,2,1]或[1,3,3,1]),strides提供步信息,padding提供是否使用全0填充。
tf.nn.avg_pool则为平均池化层