(七)卷积层——填充和步幅

在高上使用步幅 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_h\rfloor \times \lfloor(n_w-k_w+p_w+s_w)/s_w\rfloor. (nhkh+ph+sh)/sh×(nwkw+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)/1\rfloor= n_h-k_h+p_h+1 (nhkh+ph+1)/1=nhkh+ph+1

如果,使得输入和输出有相同的高宽,则设置一共的填充 p h = k h − 1 p_h=k_h-1 ph=kh1 p w = k w − 1 p_w=k_w-1 pw=kw1

假设 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=kh1 p w = k w − 1 p_w=k_w-1 pw=kw1,输出大小简化为

⌊ ( n h + s h − 1 ) / s h ⌋ × ⌊ ( n w + s w − 1 ) / s w ⌋ \lfloor(n_h+s_h-1)/s_h\rfloor \times \lfloor(n_w+s_w-1)/s_w\rfloor (nh+sh1)/sh×(nw+sw1)/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个输出通道只用1个卷积核)

多输出通道:

(七)卷积层——填充和步幅_第2张图片
(n个输出通道需要用n个卷积核)

你可能感兴趣的:(深度学习)