在上篇中,對卷積神經網路的卷積層以及池化層模組進行了簡單的介紹,接下來將對卷積神經網路的整個運作流程進行分析,以便對CNN有個總體上的認知和掌握。
如下圖,卷積神經網路要完成對圖片數字的識別任務。網路的輸入是數字為7的RGB圖片,大小為32×32×3,其中32×32為圖片的畫素大小,3表示圖片的紅、綠、藍三個通道。圖中示例的卷積神經網路共有7層(不包括輸入層):第一層卷積層Conv 1,第二層池化層Pool 2,第三層卷積層Conv 3,第四層池化層Pool 4,第五層全連線層FC 5,第六層全連線層FC 6,第7層全連線層也是網路的輸出層FC 7。
需要說明的是,圖示網路模型只是卷積神經網路的一種結構,並不是唯一結構,卷積層、池化層、全連線層的數量可根據實際情況設定。
(1)Conv 1
一個5×5×3的卷積核和表示圖片的32×32×3的資料矩陣卷積得到一個28×28×1的feature map,如下圖所示。
一個卷積核卷積得到一個feature map,當有6個卷積核時,卷積得到的特徵圖大小變為28×28×6。
引數量:一個卷積核權值引數個數5×5×3=75,偏置引數1個,75+1=76個。一共有6個卷積核,故該層待訓練總引數個數:(5×5×3+1)×6=456。
在該層中,表示圖片所有畫素點顏色深淺的32×32×3的三維資料矩陣經過和6個5×5×3的卷積核進行卷積後得到28×28×6的特徵圖,再經過非線性函式啟用即得到Conv 1層的輸出。輸出特徵圖的通道數和卷積核的數量一樣。
(2)Pool 2
匯聚視窗大小為2×2,步幅為2,經過最大池化後,得到14×14×6的特徵圖。輸入特徵圖大小為28×28×6,通道數是6,池化層不會改變特徵圖的通道數,即輸出特徵圖的通道數和輸入特徵圖的通道數一樣。池化層沒有待訓練引數。池化層未使用非線性啟用函式。
(3)Conv 3
卷積核大小5×5×6,數量是16,步幅s=1,輸出特徵圖大小為(14-5+1)×(14-5+1)×16=10×10×16。輸入特徵圖經過卷積操作還得經過非線性函式的啟用後才能得到Conv 3層的輸出。
引數量:(5×5×6+1)×16=2416。
(4)Pool 4
匯聚視窗大小為2×2,步幅為2,經過最大池化後,得到5×5×16的特徵圖。要注意的是,當前層的輸出不是一維向量,是無法直接連線下一層的全連線層的。因此,經過池化得到的輸出特徵圖還要經過flatten操作變為400×1的向量後,才能作為全連線層的輸入。
(5)FC 5
該層有120個神經元。
引數量:400×120+120=48120。
(6)FC 6
該層有84個神經元。
引數量:120×84+84=10164。
(7)FC 7(Output)
網路的輸出層,有10個神經元,使用SoftMax啟用函式,神經元節點輸出值對應10個數字的概率大小。
引數量:84×10+10=850。
當網路得到10個數字的概率以後,取概率最大的那個數字即為本次神經網路的圖片數字識別結果啦~