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

时间:2018-01-28 21:52:44

标签: tensorflow

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

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

2 个答案:

答案 0 :(得分:5)

有一个公式:

n'= floor((n + 2 * p-f)/ s + 1)

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

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

答案 1 :(得分:3)

Peter 的回答是正确的,但可能缺少一些细节。让我在上面加上。

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

另外,通用的输出大小公式是:

o = floor( (i + p - k) / s)   +   1

其中新项是 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

[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]

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