吳恩達深度學習筆記(deeplearning.ai)之卷積神經網路(CNN)(上)

Noahyo發表於2020-10-12

原文連結 https://www.cnblogs.com/szxspark/p/8439066.html

1. Padding

在卷積操作中,過濾器(又稱核)的大小通常為奇數,如3x3,5x5。這樣的好處有兩點:

  • 在特徵圖(二維卷積)中就會存在一箇中心畫素點。有一箇中心畫素點會十分方便,便於指出過濾器的位置。

  • 在沒有padding的情況下,經過卷積操作,輸出的資料維度會減少。以二維卷積為例,輸入大小 n×n,過濾器大小f×f,卷積後輸出的大小為(n−f+1)×(n−f+1)。

  • 為了避免這種情況發生,可以採取padding操作,padding的長度為p​,由於在二維情況下,上下左右都“新增”長度為p​的資料。構造新的輸入大小為(n+2p)×(n+2p)​ , 卷積後的輸出變為(n+2p−f+1)×(n+2p−f+1)​。

  • 如果想使卷積操作不縮減資料的維度,那麼p的大小應為(f−1)/2,其中f是過濾器的大小,該值如果為奇數,會在原始資料上對稱padding,否則,就會出現向上padding 1個,向下padding 2個,向左padding 1個,向右padding 2個的情況,破壞原始資料結構。

    • 舉例說明:現在有一張圖片的大小為6×6×3

2. Stride

  • 卷積中的步長大小為s,指過濾器在輸入資料上,水平/豎直方向上每次移動的步長,在Padding 公式的基礎上,最終卷積輸出的維度大小為:

  •  

    ⌊⌋符號指向下取整,在python 中為floor地板除操作。

3. Channel

通道,通常指資料的最後一個維度(三維),在計算機視覺中,RGB代表著3個通道(channel)。

  • 舉例說明:現在有一張圖片的大小為6×6×3,過濾器的大小為3×3×nc, 這裡nc指過濾器的channel大小,該數值必須與輸入的channel大小相同,即nc=3。
  • 如果有k個3×3×nc的過濾器,那麼卷積後的輸出維度為4×4×k。注意此時p=0,s=1,k表示輸出資料的channel大小。一般情況下,k代表k個過濾器提取的k個特徵,如k=128,代表128個3×3大小的過濾器,提取了128個特徵,且卷積後的輸出維度為4×4×128。

在多層卷積網路中,以計算機視覺為例,通常情況下,影像的長和寬會逐漸縮小,channel數量會逐漸增加。

4. Pooling

  • 除了卷積層,卷積網路使用池化層來縮減資料的大小,提高計算的速度 ,同時提高所提取特徵的魯棒性。 池化操作不需要對引數進行學習,只是神經網路中的靜態屬性。
  • 池化層中,資料的維度變化與卷積操作類似。池化後的channel數量與輸入的channel數量相同,因為在每個channel上單獨執行最大池化操作。
  • f=2, s=2,相當於對資料維度的減半操作,f指池化層過濾器大小,s指池化步長。
  •  
  • 5. 卷積神經網路(CNN)示例

    課堂筆記中關於簡單卷積神經網路的介紹:

    一個用於手寫數字識別的CNN結構如下圖所示:

    該網路應用了兩層卷積,並且在第二個池化層之後又接了幾個全連線層,這樣做的目的是避免某一層的啟用值數量減少的太快,具體原因後文解釋。

  與卷積神經網路的引數數量計算相關的問題:

  • 該手寫數字識別的CNN具體引數數量視覺化如下所示:


  • 從圖中可以發現,卷積層的引數數量較小,大部分引數集中在全連線層。而且隨著網路層的加深,啟用值數量逐漸減少,如果啟用值數量下降太快,會影響網路的效能。
  • 因此需要構建多個全連線層,而不是一個全連線層一步到位
  • 6. 卷積層的好處

    與只用全連線層相比,卷積層的主要優點是引數共享稀疏連線,這使得卷積操作所需要學習的引數數量大大減少。

相關文章