《動手學深度學習》第十三天 填充和步幅

2021-09-25 21:21:20 字數 2052 閱讀 4975

在閱讀**的時候就看到了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 ...