概述
在高上使用步幅
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⌋.
其中,
n
n
n是输入的长或者宽,
k
k
k是卷积核的长或者宽,
p
p
p是在高或者宽两侧一共填充p行或者列(一般用0填充),
s
s
s是在高或者宽移动的步幅
1、默认步幅 s = 1 s=1 s=1
输出大小
⌊
(
n
h
−
k
h
+
p
h
+
1
)
/
1
⌋
=
n
h
−
k
h
+
p
h
+
1
lfloor(n_h-k_h+p_h+1)/1rfloor= n_h-k_h+p_h+1
⌊(nh−kh+ph+1)/1⌋=nh−kh+ph+1
如果,使得输入和输出有相同的高宽,则设置一共的填充 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行。如果其是偶数,一种可能是上面填充 ⌈ p h / 2 ⌉ ⌈p_h/2⌉ ⌈ph/2⌉行,而下面填充 ⌊ p h / 2 ⌋ ⌊p_h/2⌋ ⌊ph/2⌋行。在宽上行为类似。卷积神经网络经常使用奇数高宽的卷积核,例如1、3、5、和7,所以填充在两端上是对称的。这样还有一点方便的是我们知道输出Y[i,j]是由输入以X[i,j] (原始矩阵) 为中心的窗口同卷积核进行相关计算得来。
2、步幅为通用时
计算输入元素滑动最后一次,填不满窗口时,我们将其结果舍弃。
设置一共的填充
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⌋
3、多输入和输出通道
多输入通道:
假设输入通道数是
c
i
c_i
ci,且卷积核窗口为
k
h
×
k
w
k_h×k_w
kh×kw。当
c
i
=
1
c_i=1
ci=1时,我们知道卷积核就是一个
k
h
×
k
w
k_h×k_w
kh×kw数组。当其大于1时,我们将会为每个输入通道分配一个单独的
k
h
×
k
w
k_h×k_w
kh×kw核数组。我们将这些数组合并起来,将得到一个
c
i
×
k
h
×
k
w
c_i×k_h×k_w
ci×kh×kw形状的卷积核。即输入通道数为n时候,相应的卷积核形状也跟着变(
1
×
k
h
×
k
w
1×k_h×k_w
1×kh×kw变
n
×
k
h
×
k
w
n×k_h×k_w
n×kh×kw),但是数目依然算是1。
(1个输出通道只用1个卷积核)
多输出通道:
(n个输出通道需要用n个卷积核)
最后
以上就是玩命大树为你收集整理的(七)卷积层——填充和步幅的全部内容,希望文章能够帮你解决(七)卷积层——填充和步幅所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复