概述
填充和步幅
一般来说,假设输入形状是 n h × n w n_htimes n_w nh×nw,卷积核窗口形状是 k h × k w k_htimes k_w kh×kw,那么输出形状将会是
( n h − k h + 1 ) × ( n w − k w + 1 ) . (n_h-k_h+1) times (n_w-k_w+1). (nh−kh+1)×(nw−kw+1).
所以卷积层的输出形状由输入形状和卷积核窗口形状决定。填充和步幅。它们可以对给定形状的输入和卷积核改变输出形状。
填充
填充(padding)是指在输入高和宽的两侧填充元素(通常是0元素)。下图里我们在原输入高和宽的两侧分别添加了值为0的元素,使得输入高和宽从3变成了5,并导致输出高和宽由2增加到4。 0 × 0 + 0 × 1 + 0 × 2 + 0 × 3 = 0 0times0+0times1+0times2+0times3=0 0×0+0×1+0×2+0×3=0。
一般来说,如果在高的两侧一共填充 p h p_h ph行,在宽的两侧一共填充 p w p_w pw列,那么输出形状将会是
( n h − k h + p h + 1 ) × ( n w − k w + p w + 1 ) , (n_h-k_h+p_h+1)times(n_w-k_w+p_w+1), (nh−kh+ph+1)×(nw−kw+pw+1),
也就是说,输出的高和宽会分别增加 p h p_h ph和 p w p_w pw。
在很多情况下,我们会设置 p h = k h − 1 p_h=k_h-1 ph=kh−1和 p w = k w − 1 p_w=k_w-1 pw=kw−1来使输入和输出具有相同的高和宽。这样会方便在构造网络时推测每个层的输出形状。假设这里 k h k_h kh是奇数,我们会在高的两侧分别填充 p h / 2 p_h/2 ph/2行。如果 k h k_h kh是偶数,一种可能是在输入的顶端一侧填充 ⌈ p h / 2 ⌉ lceil p_h/2rceil ⌈ph/2⌉行,而在底端一侧填充 ⌊ p h / 2 − 1 ⌋ lfloor p_h/2-1rfloor ⌊ph/2−1⌋行。在宽的两侧填充同理。
卷积神经网络经常使用奇数高宽的卷积核,如1、3、5和7,所以两端上的填充个数相等。对任意的二维数组X
,设它的第i
行第j
列的元素为X[i,j]
。当两端上的填充个数相等,并使输入和输出具有相同的高和宽时,我们就知道输出Y[i,j]
是由输入以X[i,j]
为中心的窗口同卷积核进行互相关计算得到的。
步幅
在上述例子里高和宽两个方向上步幅均为1。我们也可以使用更大步幅。图5.3展示了在高上步幅为3、在宽上步幅为2的二维互相关运算。可以看到,输出第一列第二个元素时,卷积窗口向下滑动了3行,而在输出第一行第二个元素时卷积窗口向右滑动了2列。当卷积窗口在输入上再向右滑动2列时,由于输入元素无法填满窗口,无结果输出。图5.3中的阴影部分为输出元素及其计算所使用的输入和核数组元素:
0
×
0
+
0
×
1
+
1
×
2
+
2
×
3
=
8
0times0+0times1+1times2+2times3=8
0×0+0×1+1×2+2×3=8、
0
×
0
+
6
×
1
+
0
×
2
+
0
×
3
=
6
0times0+6times1+0times2+0times3=6
0×0+6×1+0×2+0×3=6。
一般来说,当高上步幅为
s
h
s_h
sh,宽上步幅为
s
w
s_w
sw时,输出形状为
⌊
(
n
h
−
k
h
+
p
h
+
s
h
)
/
s
h
⌋
×
⌊
(
n
w
−
k
w
+
p
w
+
s
w
)
/
s
w
⌋
.
lfloor(n_h-k_h+p_h+s_h)/s_hrfloor times lfloor(n_w-k_w+p_w+s_w)/s_wrfloor.
⌊(nh−kh+ph+sh)/sh⌋×⌊(nw−kw+pw+sw)/sw⌋.
如果设置
p
h
=
k
h
−
1
p_h=k_h-1
ph=kh−1和
p
w
=
k
w
−
1
p_w=k_w-1
pw=kw−1,那么输出形状将简化为
⌊
(
n
h
+
s
h
−
1
)
/
s
h
⌋
×
⌊
(
n
w
+
s
w
−
1
)
/
s
w
⌋
lfloor(n_h+s_h-1)/s_hrfloor times lfloor(n_w+s_w-1)/s_wrfloor
⌊(nh+sh−1)/sh⌋×⌊(nw+sw−1)/sw⌋。更进一步,如果输入的高和宽能分别被高和宽上的步幅整除,那么输出形状将是
(
n
h
/
s
h
)
×
(
n
w
/
s
w
)
(n_h/s_h) times (n_w/s_w)
(nh/sh)×(nw/sw)。
小结
- 填充可以增加输出的高和宽。这常用来使输出与输入具有相同的高和宽。
- 步幅可以减小输出的高和宽,例如输出的高和宽仅为输入的高和宽的 1 / n 1/n 1/n( n n n为大于1的整数)。
最后
以上就是闪闪春天为你收集整理的填充与步幅对卷积层形状的作用填充和步幅的全部内容,希望文章能够帮你解决填充与步幅对卷积层形状的作用填充和步幅所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复