什么是TensorFlow中Max Pooling 2D Layer的输出张量?

时间:2017-04-17 14:46:35

标签: python tensorflow max-pooling

我试图理解有关张量流的一些基础知识 我在阅读最大合并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)。这意味着图像的widthheight都会变半,即每个通道最终会有14x14像素(总共32个通道),这意味着我们的输出是一个形状为张量的张量:{{ 1}}。

但是,根据上述链接,输出张量的形状为[batch_size, 14, 14, 32]

[batch_size, 14, 14, 1]

我在这里缺少什么?

32如何转换为1?

他们在这里应用相同的逻辑:https://www.tensorflow.org/tutorials/layers#convolutional_layer_2_and_pooling_layer_2

但这一次是正确的,即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%. 变为[batch_size, 14, 14, 64](频道数相同)。

2 个答案:

答案 0 :(得分:3)

是的,使用2x2 max pool with strides = 2x2会将数据减少到一半,输出深度不会改变。这是我给出的测试代码,输出形状为(14, 14, 32),也许是错误的?

#!/usr/bin/env python

import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data

mnist = input_data.read_data_sets('./MNIST_data/', one_hot=True)

conv1 = tf.placeholder(tf.float32, [None,28,28,32])
pool1 = tf.layers.max_pooling2d(inputs=conv1, pool_size=[2,2], strides=2)
print pool1.get_shape()

输出是:

Extracting ./MNIST_data/train-images-idx3-ubyte.gz
Extracting ./MNIST_data/train-labels-idx1-ubyte.gz
Extracting ./MNIST_data/t10k-images-idx3-ubyte.gz
Extracting ./MNIST_data/t10k-labels-idx1-ubyte.gz
(?, 14, 14, 32)

答案 1 :(得分:0)

尼古拉,你的想法已得到纠正。

学习卷积和汇集的概念,我遇到了这个问题。感谢您提出问题,该问题将我带到了提供信息的文档。