在閱讀**的時候就看到了padding和stride兩個單詞,來深度學習課程詳細了解一下他們的作用。
填充和步幅是卷積層的兩個超引數,通過他們可以改變輸出形狀。
填充是指在輸入的四周新增0元素。
比如原輸入陣列形狀是nh×nw,卷積核形狀是kh×kw,那麼原輸出陣列形狀就是
(nh-kh+1)×(nw-kw+1)。如果我們對輸入陣列進行填充高為ph,寬為pw,那麼新的輸出陣列形狀就是(nh-kh+ph+1)×(nw-kw+pw+1)。
通常我們為了方便在構造網路時推測每個層的輸出形狀,會設定ph=kh-1,pw=kw-1。這樣輸入輸出形狀就是一致的。
具體來說,當卷積核kh是奇數的時候,兩邊均填充ph/2;是偶數的時候,ph就是奇數,那麼下側填充不超過ph/2的最大值,上側填充大於ph/2的最小值。kw同理。
from mxnet import nd
from mxnet.gluon import nn
# 定義乙個函式來計算卷積層。它初始化卷積層權重,並對輸入和輸出做相應的公升維和降維
def comp_conv2d(conv2d, x):
conv2d.initialize()
# (1, 1)代表批量大小和通道數均為1
x = x.reshape((1, 1) + x.shape)
y = conv2d(x)
return y.reshape(y.shape[2:]) # 排除不關心的前兩維:批量和通道
# 注意這裡是兩側分別填充1行或列,所以在兩側一共填充2行或列
conv2d = nn.conv2d(1, kernel_size=3, padding=1)
# 這是卷積核是3×3的情況,直接設定padding為1,就是高和寬的兩側填充數字均為1
# 如當kernel_size=(5,3)時,padding=(2,1)即可
x = nd.random.uniform(shape=(8, 8)) # 輸入形狀是8×8
comp_conv2d(conv2d, x).shape # 發現輸出形狀也是8×8
當兩端上的填充個數相等,並使輸入和輸出具有相同的高和寬時,我們就知道輸出y[i,j]是由輸入以x[i,j]為中心的視窗同卷積核進行互相關計算得到的。
卷積視窗在滑動的過程中,每次滑動的行數和列數稱為步幅。過程如下圖:
從最左上角開始卷積,紅色圈住的四個元素與卷積核卷積得到
輸出的第一行第乙個元素0: 0×0+0×1+0×2+0×3=0
然後向右移的時候步幅為2,得到黃色圈住的四個元素,與卷積核卷積得到第一行第二個元素8: 0×0+0×1+1×2+2×3=8
再向右移的時候,無法框住四個元素。
從最左上下移,步幅為3,得到紫色框住的四個元素,與卷積核卷積得到第二行第乙個元素6: 0×0+6×1+0×2+0×3=6
然後右移,步幅為2,得到黑色圈住的四個元素,與卷積核卷積得到第二行第二個元素8: 7×0+8×1+0×2+0×3=6
一般來說,當高上步幅為sh,寬上步幅為sw時,得到的輸出陣列的形狀是:
⌊(nh−kh+ph+sh)/sh⌋×⌊(nw−kw+pw+sw)/sw⌋
當設定ph=kh-1,pw=kw-1時,輸出形狀簡化為⌊(nh+sh−1)/sh⌋×⌊(nw+sw−1)/sw⌋
舉個例子:
conv2d = nn.conv2d(1, kernel_size=(3, 5), padding=(0, 1), strides=(3, 4))
comp_conv2d(conv2d, x).shape
輸入x為8×8,卷積核為3×5,填充是0×2,步長是3×4,那麼得到是陣列形狀是⌊(8+0-3+3)/3⌋=2 (8+2-5+4)/ 4 = 2
得到2×2的輸出陣列
填充可以增加輸出的高和寬。這常用來使輸出與輸入具有相同的高和寬。
步幅可以減小輸出的高和寬,例如輸出的高和寬僅為輸入的高和寬的1/n(n為大於1的整數)。
學習Python 第十三天
二叉樹 一,名詞 根邊 樹葉 葉子 沒有兒子 兄弟 具有相同父親的節點 祖父和孫子 路徑路徑的長 深度 從根到該點 高 從該點到葉子 祖先 後裔 真祖先 真後裔 二,樹的實現 class treenode def init self,data,firstchild,nextsibling self....
Java學習第十三天
13.01 常見物件 stringbuffer類的概述 b stringbuffer和string的區別 13.02 常見物件 stringbuffer類的構造方法 b stringbuffer的方法 c 案例演示 13.03 常見物件 stringbuffer的新增功能 public string...
Linux 第十三天學習
一 服務程式apache ilnux系統的配置檔案 服務目錄 etc httpd 主配置檔案 etc httpd conf httpd.conf 資料目錄 var www html 訪問日誌 var log httpd access log 錯誤日誌 var log httpd error log ...