步幅的 Tensorflow 输出
Tensorflow output from stride
在尝试使用 Tensorflow 时,我遇到了一个关于步幅的小问题。
我有一张尺寸为 67*67 的图像,我想应用尺寸为 7*7 且步幅为 3 的过滤器。输出层的边长应为 20,计算公式为:
其中 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'
填充。
所以在你的情况下你得到:
如果您实际上使用了 'VALID'
填充,则输出会更接近您的近似值。
您可以阅读有关 tensorflow 如何计算特征图大小和填充的更多信息here.
在尝试使用 Tensorflow 时,我遇到了一个关于步幅的小问题。
我有一张尺寸为 67*67 的图像,我想应用尺寸为 7*7 且步幅为 3 的过滤器。输出层的边长应为 20,计算公式为:
其中 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'
填充。
所以在你的情况下你得到:
如果您实际上使用了 'VALID'
填充,则输出会更接近您的近似值。
您可以阅读有关 tensorflow 如何计算特征图大小和填充的更多信息here.