根据此深度学习课程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]
答案 0 :(得分:2)
Conv2d有一个名为padding see here
的参数如果您将填充设置为“有效”,它将满足您的公式。默认为“SAME”,填充零的图像(与添加边框相同),使得输出将保持与输入相同的形状。
答案 1 :(得分:2)
取决于填充参数。 ' SAME'将输出保持为WxW(假设步幅= 1,)' VALID'将输出的大小缩小为(W-F + 1)x(W-F + 1)