当步幅大于1时,SAME填充的行为是什么?

Ste*_*hen 2 tensorflow

我对Tensorflow中的SAME填充的理解是添加了填充,使得输出尺寸(宽度和高度)与输入尺寸相同.但是,当stride = 1时,这种理解才真正有意义,因为如果步幅大于1,那么输出尺寸几乎肯定会更低.

所以我想知道在这种情况下计算填充的算法是什么.是否只是添加了填充,以便过滤器应用于每个输入值,而不是在右边留下一些?

小智 6

有一个公式:

n'= floor((n + 2*pf)/ s + 1)

其中n'是输出大小,n是输入大小,p是填充,f是过滤器大小,s是步幅.

如果使用步幅> 1的SAME填充,则p将是可被s整除的最小数(n + 2*pf).注意:p可以是十进制的,因为它将在图像的两侧进行平均.

  • 你有这方面的参考吗? (7认同)

Gin*_*lgo 5

彼得的回答是正确的,但可能缺少一些细节。让我补充一下。

Autopadding = SAME 意味着:o = ceil(i/s),其中 o = 输出大小,i = 输入大小,s = 步幅。

此外,通用输出尺寸公式为:

o = floor( (i + p - k) / s)   +   1
Run Code Online (Sandbox Code Playgroud)

其中新项是 p(填充)和 k,即有效内核大小(包括膨胀,或者如果禁用膨胀则仅包括内核大小)。

如果您开发该公式来求解 p,您将得到:

p_min = (o-1) s - i + k # i.e., when the floor is removed from the previous equation
p_max = o s - i + k - 1 # i.e., when the numerator of the floor % s is s-1
Run Code Online (Sandbox Code Playgroud)

[p_min, p_max] 范围内的任何填充值 p 将满足条件 o = ceil(i/s),这意味着对于步长 s,有 s 个总解满足该公式。

使用 p_min 作为填充是常态,因此您可以忽略所有其他 s-1 解决方案。

PS:这适用于 1D,但对于 nD,只需对每个维度独立重复这些公式,即

p_min[dimension_index] = (o[dimension_index]-1)s[dimension_index] - i[dimension_index] + k[dimension_index]
Run Code Online (Sandbox Code Playgroud)

作为参考,这两个链接非常有用: