天天看點

[Pytorch系列-31]:卷積神經網絡 - torch.nn.Conv2d() 用法詳解

作者首頁(​​文火冰糖的矽基工坊​​):​​文火冰糖(王文兵) 

目錄

​​前言:​​

​​第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 一維卷積

[Pytorch系列-31]:卷積神經網絡 - torch.nn.Conv2d() 用法詳解
  • 無論有幾個通道,卷積後的輸出資料的形狀是:一維。
  • 一維卷積常用于序列模型,如自然語言處理領域。
  • 圖中的輸入的資料次元為1,長度為8,形狀為1*8,過濾器的次元為1,長度為5,形狀為1*5,步長為1,卷積後輸出的資料形狀為:8−5+1=4。
  • 如果過濾器數量仍為1,輸入資料的channel數量變為16,即輸入資料形狀為16*8。

1.2 二維卷積

[Pytorch系列-31]:卷積神經網絡 - torch.nn.Conv2d() 用法詳解
  • 無論有幾個通道,卷積後的輸出資料的形狀是:二維。
  • 二維卷積常用于計算機視覺、圖像處理領域。
  • 圖中的輸入的資料形狀為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 三維卷積

[Pytorch系列-31]:卷積神經網絡 - torch.nn.Conv2d() 用法詳解
  • 無論有幾個通道,卷積後的輸出資料的形狀是:三維。
  • 三維卷積常用于醫學領域(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)

[Pytorch系列-31]:卷積神經網絡 - torch.nn.Conv2d() 用法詳解

如果設定的是dilation=1,那麼效果如圖:(藍色為輸入,綠色為輸出,卷積核仍為 3 × 3 。)

[Pytorch系列-31]:卷積神經網絡 - torch.nn.Conv2d() 用法詳解

這時候,卷積核的元素之間有一個空隙。

  • 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 都可以是一個整數或者是一個元組,一個值的情況将會同時作用于高和寬 兩個次元,兩個值的元組情況代表分别作用于 高 和 寬 次元。

繼續閱讀