TensorFlow - 池化层
flyfish
部分代码
M = np.array([
[[1], [2], [5], [6]],
[[3], [4], [7], [8]],
[[9], [10],[11],[12]],
[[13],[14],[15],[16]] ])
tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')
[[[[ 4.] [ 8.]]
[[14.] [16.]]]]
其中分组是1,2,3,4 一组
5,6,7,8一组
9,10,13,14一组
11,12,15,16一组
整体代码
import tensorflow as tf
import numpy as np
M = np.array([
[[1], [2], [5], [6]],
[[3], [4], [7], [8]],
[[9], [10],[11],[12]],
[[13],[14],[15],[16]] ])
#Matrix shape is: (4, 4, 1)
#batch=1
M = np.asarray(M, dtype='float32')
M = M.reshape(1, 4, 4, 1)
#batch, height, width, channels
x = tf.placeholder('float32', [1, None, None, 1])
pool = tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')
with tf.Session() as sess:
tf.global_variables_initializer().run()
pool = sess.run(pool,feed_dict={x:M})
print("pool: ", pool)
如果更改strides步长结果如下
pool = tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 1, 1], padding=’SAME’)
height步长是2, width步长是1,
分组如下
1,2,3,4
2,5,4,7
5,6,7,8
6,0,8,0
第二行是
9,10,13,14
10,11,14,15
11,12,15,16
12,0,16,0
以下摘自《面向机器智能TensorFlow实践》
池化层
池化层能够减少过拟合,并通过减小输入的尺寸来提高性能。它们可用于对输入降采样,但会为后续层保留重要的信息。只使用tf.nn.conv2d来减小输入的尺寸也是可以的,但池化层的效率更高。1.tf.nn.max_pool 跳跃遍历某个张量,并从被卷积核覆盖的元素中找出最大的数值作为卷积结果。当输入数据的灰度与图像中的重要性相关时,这种池化方式非常有用。
2.tf.nn.avg_pool 跳跃遍历一个张量,并将被卷积核覆盖的各深度值取平均。当整个卷积核都非常重要时,若需实现值的缩减,平均池化是非常有用的,例如输入张量宽度和高度很大,但深度很小的情况。