Filter 步幅张量输出

Filter 步幅张量输出,filter,tensorflow,convolution,conv-neural-network,stride,Filter,Tensorflow,Convolution,Conv Neural Network,Stride,在尝试使用Tensorflow时,我遇到了一个关于步幅的小问题 我有一个大小为67*67的图像,我想应用一个大小为7*7的过滤器,步幅为3。输出层的边长应为20,计算公式如下: 其中n是输出层边缘长度(在本例中为20)。其计算方法如下: 如果我们只考虑第一行(因为其他行是相同的),那么在第一行中的67个元素中,前7个将转到输出层的第一个单元格。然后,过滤器向右移动3个滤芯,使过滤器覆盖滤芯4至10,这将对应于输出层的第二个滤芯。诸如此类。每次我们前进3个元素,我们前进的总次数(包括第一步,其中

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

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

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

如果我们只考虑第一行(因为其他行是相同的),那么在第一行中的67个元素中,前7个将转到输出层的第一个单元格。然后,过滤器向右移动3个滤芯,使过滤器覆盖滤芯4至10,这将对应于输出层的第二个滤芯。诸如此类。每次我们前进3个元素,我们前进的总次数(包括第一步,其中包括7个元素)是n。因此,我使用的方程式

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

有人能解释为什么在Tensorflow中这样做吗


谢谢

根据所使用的填充,可以通过两种方式计算输出大小。如果您使用的是
'SAME'
填充,则输出大小的计算公式为:

out_height = ceil(float(in_height) / float(strides[1]))
out_width  = ceil(float(in_width) / float(strides[2]))
out_height = ceil(float(in_height - filter_height + 1) / float(strides[1]))
out_width  = ceil(float(in_width - filter_width + 1) / float(strides[2]))
其中,与
一样,“有效”
填充输出计算为:

out_height = ceil(float(in_height) / float(strides[1]))
out_width  = ceil(float(in_width) / float(strides[2]))
out_height = ceil(float(in_height - filter_height + 1) / float(strides[1]))
out_width  = ceil(float(in_width - filter_width + 1) / float(strides[2]))
这就是您用来计算输出的内容,但我们可以清楚地看到您必须使用
“相同”
填充

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

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

您可以阅读有关tensorflow如何计算要素贴图大小和填充的详细信息