为什么convorflow中的conv2d给出的输出具有与输入相同的形状

时间:2016-10-23 17:05:25

标签: python tensorflow

根据此深度学习课程http://cs231n.github.io/convolutional-networks/#conv,它表示如果输入x的形状[W,W](其中W = width = height)通过卷积图层过滤器形状[F,F]步幅 S图层将返回{{1形状output

然而,当我试图遵循Tensorflow的教程时:https://www.tensorflow.org/versions/r0.11/tutorials/mnist/pros/index.html。函数[(W-F)/S +1, (W-F)/S +1]

似乎有所不同

无论我如何更改过滤器大小,tf.nn.conv2d(inputs, filter, stride)都会不断返回一个与输入形状相同的值。

就我而言,我使用conv2d数据集,表明每张图片的尺寸都为MNIST(忽略[28,28]

但在我定义了第一个channel_num = 1图层后,​​我使用conv1查看其输出,它给了我conv1.get_shape()

这是为什么?我认为返回值应该遵循上面的公式。

附录:代码段

[28,28, num_of_filters]

2 个答案:

答案 0 :(得分:2)

Conv2d有一个名为padding see here

的参数

如果您将填充设置为“有效”,它将满足您的公式。默认为“SAME”,填充零的图像(与添加边框相同),使得输出将保持与输入相同的形状。

答案 1 :(得分:2)

取决于填充参数。 ' SAME'将输出保持为WxW(假设步幅= 1,)' VALID'将输出的大小缩小为(W-F + 1)x(W-F + 1)