我对Tensorflow中SAME padding的理解是,添加padding是为了使输出尺寸(宽度和高度)与输入尺寸相同。然而,这种理解只有在stride=1时才真正有意义,因为如果stride>1,那么输出维度几乎肯定会更低。所以我想知道在这种情况下计算填充的算法是什么。是否只是简单地添加填充,以便将过滤器应用于每个输入值,而不是在右侧保留一些?
xxe27gdn1#
有一个公式n’= floor((n+2p-f)/s + 1)其中n’是输出大小,n是输入大小,p是填充并且f是滤波器大小,s将是步幅。如果使用步幅> 1的SAME填充,p将是使(n+2p-f)被s整除的最小数。注:p可以是小数,因为它将在图像的两侧上取平均值。
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]
作为参考,这两个链接非常有用:
xriantvc3#
我将扩展前面的非常好的问题。我不能在这里使用LaTex,否则我会以更好的方式插入等式。填充“SAME”的条件意味着层的输出o等于ceil(i/s),其中i是输入大小,s是步幅。我在发展一维的情况,因为轴是独立的。卷积输出的一般公式是o = floor((i + 2p - k)/s) + 1,其中p是填充,k是内核大小。这个等式中唯一未知的值是p,因为输出大小也是由“相同”条件给出的。给定方程floor(x/y)=n,其中x,y是真实的,n是整数,x的最小值是使得x % y = 0的值。在这种情况下,可以删除floor括号。插入x =i + 2p - k、y = s和n = o -1。如果求解p,则得到p = ((o-1)s - i + k)/2。这是确保“相同”条件的最小填充值。x是x % y = y-1。通过使用除法的基本关系,可以写为x = ny + (y-1)。您可以根据前面的关系替换x,y和n,然后求解p。得到p = (k - p + os - 1)/2。这是满足“相同”条件的填充的最大值。这两个极端之间的任何填充值都是可以的,但通常使用最小值。
o
ceil(i/s)
i
s
o = floor((i + 2p - k)/s) + 1
p
k
floor(x/y)=n
x
y
n
x % y = 0
floor
x =i + 2p - k
y = s
n = o -1
p = ((o-1)s - i + k)/2
x % y = y-1
x = ny + (y-1)
p = (k - p + os - 1)/2
3条答案
按热度按时间xxe27gdn1#
有一个公式
n’= floor((n+2p-f)/s + 1)
其中n’是输出大小,n是输入大小,p是填充并且f是滤波器大小,s将是步幅。
如果使用步幅> 1的SAME填充,p将是使(n+2p-f)被s整除的最小数。注:p可以是小数,因为它将在图像的两侧上取平均值。
7xzttuei2#
彼得的回答是正确的,但可能缺乏一些细节。让我在上面加上。
Autopadding = SAME表示:〇 = ceil(i/s),其中〇 =输出大小,i =输入大小,s =步幅。
此外,通用输出大小公式为:
其中新项是p(pading)和k,即有效内核大小(包括膨胀,或者如果膨胀被禁用则仅包括内核大小)。
如果你开发这个公式来求解p,你会得到:
范围[p_min,p_max]中的任何填充值p将满足条件o = ceil(i/s),这意味着对于步幅s,存在s个满足公式的总解。
通常使用p_min作为填充,因此您可以忽略所有其他s-1解决方案。
PS:这是针对1D的,但是对于nD,简单地对每个维度独立地重复这些公式,即,
作为参考,这两个链接非常有用:
xriantvc3#
我将扩展前面的非常好的问题。我不能在这里使用LaTex,否则我会以更好的方式插入等式。填充“SAME”的条件意味着层的输出
o
等于ceil(i/s)
,其中i
是输入大小,s
是步幅。我在发展一维的情况,因为轴是独立的。卷积输出的一般公式是
o = floor((i + 2p - k)/s) + 1
,其中p
是填充,k
是内核大小。这个等式中唯一未知的值是p
,因为输出大小也是由“相同”条件给出的。给定方程
floor(x/y)=n
,其中x
,y
是真实的,n
是整数,x
的最小值是使得x % y = 0
的值。在这种情况下,可以删除floor
括号。插入x =i + 2p - k
、y = s
和n = o -1
。如果求解p
,则得到p = ((o-1)s - i + k)/2
。这是确保“相同”条件的最小填充值。x
是x % y = y-1
。通过使用除法的基本关系,可以写为x = ny + (y-1)
。您可以根据前面的关系替换x
,y
和n
,然后求解p
。得到p = (k - p + os - 1)/2
。这是满足“相同”条件的填充的最大值。这两个极端之间的任何填充值都是可以的,但通常使用最小值。