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

eoxn13cs  于 2023-05-18  发布在  其他
关注(0)|答案(3)|浏览(211)

我对Tensorflow中SAME padding的理解是,添加padding是为了使输出尺寸(宽度和高度)与输入尺寸相同。然而,这种理解只有在stride=1时才真正有意义,因为如果stride>1,那么输出维度几乎肯定会更低。
所以我想知道在这种情况下计算填充的算法是什么。是否只是简单地添加填充,以便将过滤器应用于每个输入值,而不是在右侧保留一些?

xxe27gdn

xxe27gdn1#

有一个公式
n’= floor((n+2p-f)/s + 1)
其中n’是输出大小,n是输入大小,p是填充并且f是滤波器大小,s将是步幅。
如果使用步幅> 1的SAME填充,p将是使(n+2
p-f)被s整除的最小数。注:p可以是小数,因为它将在图像的两侧上取平均值。

7xzttuei

7xzttuei2#

彼得的回答是正确的,但可能缺乏一些细节。让我在上面加上。
Autopadding = SAME表示:〇 = ceil(i/s),其中〇 =输出大小,i =输入大小,s =步幅。
此外,通用输出大小公式为:

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

其中新项是p(pading)和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]

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

xriantvc

xriantvc3#

我将扩展前面的非常好的问题。我不能在这里使用LaTex,否则我会以更好的方式插入等式。填充“SAME”的条件意味着层的输出o等于ceil(i/s),其中i是输入大小,s是步幅。我在发展一维的情况,因为轴是独立的。
卷积输出的一般公式是o = floor((i + 2p - k)/s) + 1,其中p是填充,k是内核大小。这个等式中唯一未知的值是p,因为输出大小也是由“相同”条件给出的。
给定方程floor(x/y)=n,其中xy是真实的,n是整数,x的最小值是使得x % y = 0的值。在这种情况下,可以删除floor括号。插入x =i + 2p - ky = sn = o -1。如果求解p,则得到p = ((o-1)s - i + k)/2。这是确保“相同”条件的最小填充值。
xx % y = y-1。通过使用除法的基本关系,可以写为x = ny + (y-1)。您可以根据前面的关系替换xyn,然后求解p。得到p = (k - p + os - 1)/2。这是满足“相同”条件的填充的最大值。这两个极端之间的任何填充值都是可以的,但通常使用最小值。

相关问题