从步幅输出的Tensorflow

时间:2016-07-03 06:51:19

标签: filter tensorflow convolution conv-neural-network stride

在尝试使用Tensorflow时,我遇到了一个关于步幅的问题。

我的图像尺寸为67 * 67,我希望应用尺寸为7 * 7且尺寸为3的滤镜。输出图层的边长应为20:

formula

其中 n 是输出层边长(在本例中为20)。它按以下方式计算:

  

如果我们只考虑第一行(因为其他行是相同的),那么在第一行中的67个元素中,前7个将转到输出层的第一个单元格。然后,滤波器向右移动3个元素,这使得滤波器覆盖元件4到10,并且这将对应于输出层的第二个元素。所以就这样。每次我们前进3个元素和我们前进的总次数(计算它涵盖7个元素的第一步)是 n 。因此,我使用的等式。

然而,我从Tensorflow获得的输出层是23,这是67/3并向上舍入到下一个整数。我不明白这背后的原因。

有人可以解释为什么在Tensorflow中这样做了吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

输出大小以两种方式计算,具体取决于您使用的填充。如果使用'SAME'填充,则输出大小计算为:

out_height = ceil(float(in_height) / float(strides[1]))
out_width  = ceil(float(in_width) / float(strides[2]))

'VALID'填充输出的计算方式如下:

out_height = ceil(float(in_height - filter_height + 1) / float(strides[1]))
out_width  = ceil(float(in_width - filter_width + 1) / float(strides[2]))

您使用的是计算输出的内容,但我们可以清楚地看到您必须使用'SAME'填充。

所以在你的情况下,你得到:

formula

如果您实际使用'VALID'填充,则输出将更接近您的近似值。

formula

您可以详细了解tensorflow如何计算要素图尺寸和填充here.