作者首頁(文火冰糖的矽基工坊):文火冰糖(王文兵)
目錄
前言:
第1章 關于1維Conv1d、2維卷積Conv2d、3維卷積Conv3d說明
1.1 一維卷積
1.2 二維卷積
1.3 三維卷積
第2章 Conv2d類說明
2.1 作用
2.2 Conv2d的本質
2.3 類原型
2.4 參數說明
前言:
本文是深度學習架構 pytorch 的API : torch.nn.Conv2d() 函數的用法。
本部落格介紹了 torch.nn.Conv2d() 各個參數的含義和用法,學會使用 pytorch 建立 卷積神經網絡。
參考:官方文檔和其它部落格。
第1章 關于1維Conv1d、2維卷積Conv2d、3維卷積Conv3d說明
1.1 一維卷積
- 無論有幾個通道,卷積後的輸出資料的形狀是:一維。
- 一維卷積常用于序列模型,如自然語言處理領域。
- 圖中的輸入的資料次元為1,長度為8,形狀為1*8,過濾器的次元為1,長度為5,形狀為1*5,步長為1,卷積後輸出的資料形狀為:8−5+1=4。
- 如果過濾器數量仍為1,輸入資料的channel數量變為16,即輸入資料形狀為16*8。
1.2 二維卷積
- 無論有幾個通道,卷積後的輸出資料的形狀是:二維。
- 二維卷積常用于計算機視覺、圖像處理領域。
- 圖中的輸入的資料形狀為14×14,過濾器形狀為5×5,二者做卷積。步長為1時,輸出的資料形狀為10×10,即14−5+1=10。
- 上述内容沒有引入channel的概念,也可以說channel的數量為1。
- 如果将二維卷積中輸入的channel的數量變為3,即輸入的資料次元變為(14×14×3)。由于卷積操作中過濾器的channel數量必須與輸入資料的channel數量相同,過濾器大小也變為5×5×3。在卷積的過程中,過濾器與資料在channel方向分别卷積,之後将卷積後的數值相加,最終輸出的資料形狀為10×10。輸出依然是二維資料。
1.3 三維卷積
- 無論有幾個通道,卷積後的輸出資料的形狀是:三維。
- 三維卷積常用于醫學領域(CT影響),視訊處理領域(檢測動作及人物行為)。
第2章 Conv2d類說明
2.1 作用
在Pytorch中,用于的定義一個二維卷積層。
2.2 Conv2d的本質
Conv2d本質是一個模闆類,其參數用于賦給構造函數,用于建立二維的卷積層 。
2.3 類原型
Conv2d (in_channels, out_channels, kernel_size, stride=1,padding=0, dilation=1, groups=1,bias=True, padding_mode=‘zeros’)
2.4 參數說明
- in_channels:輸入的通道數目 【必選】
- out_channels: 輸出的通道數目 【必選】,決定了卷積的個數。
- kernel_size:卷積核的大小,類型為int 或者元組,當卷積是方形的時候,隻需要一個整數邊長即可,卷積不是方形,要輸入一個元組表示 高和寬。【必選】
- stride: 卷積每次滑動的步長為多少,預設是 1 【可選】
- padding: 設定在所有邊界增加 值為 0 的邊距的大小(也就是在feature map 外圍增加幾圈 0 ),例如當 padding =1 的時候,如果原來大小為 3 × 3 ,那麼之後的大小為 5 × 5 。即在外圍加了一圈 0 。【可選】
備注:
這裡并沒有指定特征輸出的大小,特征輸出的形狀是有輸入特征的形狀、卷積核的形狀、移動步長共同決定的,可以計算出來。
- dilation:控制卷積核之間的間距,(什麼意思?請看例子)【可選】,就是相鄰兩個卷積核元素的距離,預設為0,即相鄰兩個卷積核元素是僅僅相鄰的,中間沒有空隙。
如果我們設定的dilation=0的話,效果如圖:(藍色為輸入,綠色為輸出,卷積核為3 × 3)
如果設定的是dilation=1,那麼效果如圖:(藍色為輸入,綠色為輸出,卷積核仍為 3 × 3 。)
這時候,卷積核的元素之間有一個空隙。
- groups:控制輸入和輸出之間的連接配接。(不常用)【可選】
舉例來說:
當groups 為1的時候,分為一組,即所有的輸入都會連接配接到所有輸出。
當groups 為2的時候,分為兩組,并排放置兩層,每層看到一半的輸入通道并産生一半的輸出通道,并且兩者都是串聯在一起的。這也是參數字面的意思:“組” 的含義。
需要注意的是,in_channels 和 out_channels 必須都可以整除 groups,否則會報錯。
Alex就是把卷積核分層了兩組,分别用不同的GPU上進行訓練。
- bias: 是否将一個 學習到的 bias 增加輸出中,預設是 True,就是否需要偏置值b 。【可選】
- padding_mode : 字元串類型,接收的字元串隻有 “zeros” 和 “circular”。【可選】
注意:參數 kernel_size,stride,padding,dilation 都可以是一個整數或者是一個元組,一個值的情況将會同時作用于高和寬 兩個次元,兩個值的元組情況代表分别作用于 高 和 寬 次元。