我对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可以是十进制的,因为它将在图像的两侧进行平均.
彼得的回答是正确的,但可能缺少一些细节。让我补充一下。
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)
作为参考,这两个链接非常有用:
归档时间: |
|
查看次数: |
2514 次 |
最近记录: |