1

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

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

公式

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

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

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

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

谢谢!

4

1 回答 1

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'填充。

因此,在您的情况下,您会得到:

公式

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

公式

您可以在此处阅读有关 tensorflow 如何计算特征图大小和填充的更多信息。

于 2016-07-05T03:07:52.377 回答