【发布时间】:2021-06-03 21:23:24
【问题描述】:
我对 Tensorflow 中 SAME 填充的理解是添加了填充,以便输出尺寸(宽度和高度)与输入尺寸相同。然而,这种理解只有在 stride=1 时才真正有意义,因为如果 stride >1,那么输出维度几乎肯定会更低。
所以我想知道在这种情况下计算填充的算法是什么。是否只是添加了填充,以便将过滤器应用于每个输入值,而不是在右侧留下一些?
【问题讨论】:
标签: tensorflow
我对 Tensorflow 中 SAME 填充的理解是添加了填充,以便输出尺寸(宽度和高度)与输入尺寸相同。然而,这种理解只有在 stride=1 时才真正有意义,因为如果 stride >1,那么输出维度几乎肯定会更低。
所以我想知道在这种情况下计算填充的算法是什么。是否只是添加了填充,以便将过滤器应用于每个输入值,而不是在右侧留下一些?
【问题讨论】:
标签: tensorflow
有一个公式:
n' = 楼层((n+2*p-f)/s + 1)
其中 n' 是输出大小,n 是输入大小,p 是填充,f 是过滤器大小,s 是步幅。
如果您使用步幅 > 1 的 SAME 填充,p 将是使 (n+2*p-f) 可被 s 整除的最小数字。注意:p 可以是小数,因为它将在图像的两侧取平均值。
【讨论】:
彼得的回答是正确的,但可能缺少一些细节。让我补充一下。
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:这将是一维的,但对于 nD,只需为每个维度独立重复这些公式,即,
p_min[dimension_index] = (o[dimension_index]-1)s[dimension_index] - i[dimension_index] + k[dimension_index]
对于参考,这两个链接非常有用:
【讨论】: