在進行卷積運算時如果選用了same模式,我們則需要對要處理的卷(volume)進行零填充,通過零填充能夠爲我們帶來如下兩條好處:
- 保持卷的尺寸不變,這對於深度神經網絡來說是重要的因爲如果不經行零填充在逐層深入後卷的尺寸會被收縮
- 通過零填充卷邊緣的數據更能夠有效的參與計算影響後續參數,
在進行零填充的時候可以使用numpy的pad函數實現,其中pad函數的第一個參數代表待填充的數組,第二個參數指示填充規則,第三個參數指定填充數據的模式這裏可以選擇“constant”代表着常量填充,當然除此之外還可以使用其他的數據填充模式比如“mean”代表着取中值填充,當填充規則爲“constant”的時可以結合填充規則指定填充常量值,默認情況下是零填充。這些參數中最值得探究的就是第二個參數,這個參數可以是一個常量,數組或者元組等,接下來以幾個例子進行說明:
- 當第二個參數是常量時各個維度採取相同的填充規則即在每個維度前後填充相同數量的數據如下所示:
a = np.array([[1,2],[3,4]])
print(a)
np.pad(a,1,'constant')
結果如下所示
[[1 2]
[3 4]]
array([[0, 0, 0, 0],
[0, 1, 2, 0],
[0, 3, 4, 0],
[0, 0, 0, 0]])
- 當第二個參數是二元列表或者元組時各個維度採取相同的填充規則但是二元數組或者元組中的兩個數字分別指明瞭在每個維度前或後分別填充多少數據:
a = np.array([[1,2],[3,4]])
print(a)
np.pad(a,[0,1],'constant')
結果如下所示
[[1 2]
[3 4]]
array([[1, 2, 0],
[3, 4, 0],
[0, 0, 0]])
- 當第二個參數是一個數組或者元組且裏面的元素是一個二元數組或者元組時與上一個填充規則相同:
a = np.array([[1,2],[3,4]])
print(a)
np.pad(a,[[0,1]],'constant')
結果如下所示
[[1 2]
[3 4]]
array([[1, 2, 0],
[3, 4, 0],
[0, 0, 0]])
- 當第二個參數是一個數組或者元組但裏面元素是二元數組或者元組並且數量與維度相同時每個二元數組或元組分別指定了對應維度的填充規則,如下所示:
a = np.array([[1,2],[3,4]])
print(a)
np.pad(a,[[0,1],[0,0]],'constant')
結果如下所示
[[1 2]
[3 4]]
array([[1, 2],
[3, 4],
[0, 0]])