TensorFlow - 池化层

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)

TensorFlow - 池化层_第1张图片

如果更改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 跳跃遍历一个张量,并将被卷积核覆盖的各深度值取平均。当整个卷积核都非常重要时,若需实现值的缩减,平均池化是非常有用的,例如输入张量宽度和高度很大,但深度很小的情况。

你可能感兴趣的:(深度学习)