我试图了解有关 tensorflow 的一些基础知识,但在阅读最大池化 2D 层的文档时遇到了困难:https ://www.tensorflow.org/tutorials/layers#pooling_layer_1
这是指定 max_pooling2d 的方式:
pool1 = tf.layers.max_pooling2d(inputs=conv1, pool_size=[2, 2], strides=2)
其中conv1
有一个形状为 的张量[batch_size, image_width, image_height, channels]
,在这种情况下具体为[batch_size, 28, 28, 32]
.
所以我们的输入是一个形状为: 的张量[batch_size, 28, 28, 32]
。
我对最大池化 2D 层的理解是它将应用大小pool_size
(在本例中为 2x2)的过滤器并将滑动窗口移动stride
(也是 2x2)。这意味着图像的width
和height
都将减半,即我们最终将得到每个通道 14x14 像素(总共 32 个通道),这意味着我们的输出是一个形状为: 的张量[batch_size, 14, 14, 32]
。
但是,根据上面的链接,输出张量的形状是[batch_size, 14, 14, 1]
:
Our output tensor produced by max_pooling2d() (pool1) has a shape of
[batch_size, 14, 14, 1]: the 2x2 filter reduces width and height by 50%.
我在这里想念什么?
32 是如何转换为 1 的?
他们稍后在这里应用相同的逻辑:https ://www.tensorflow.org/tutorials/layers#convolutional_layer_2_and_pooling_layer_2
但这一次是正确的,即[batch_size, 14, 14, 64]
变为[batch_size, 7, 7, 64]
(通道数相同)。