步幅的 Tensorflow 输出

Tensorflow output from stride

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

我有一张尺寸为 67*67 的图像,我想应用尺寸为 7*7 且步幅为 3 的过滤器。输出层的边长应为 20,计算公式为:

formula

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

If we only consider the first row (since other rows are the same), then out of the 67 elements in the first row, the first 7 would go to the first cell of the output layer. Then the filter moves 3 element to the right, which makes the filter covering element 4 to 10, and that would correspond to the 2nd element of the output layer. So on so forth. Every time we advance 3 elements and the total number of times we will advance (counting the first step where it covers 7 elements) is n. Thus the equation I used.

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

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

谢谢!

根据您使用的填充,可以通过两种方式计算输出大小。如果您使用 '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.