深度学习(DL)与卷积神经网络(CNN)学习随笔-05-基于Python的LeNet之CNN
本文原鏈接可以查看更多文章?
?
博文01介紹了CNN的基本結構。博文02、03、04依次介紹了卷積操作、LR模型的建立及實現,MLP模型及實現。這些都是作為實現LeNet的鋪墊。因為LeNet的實現就是由它們組成的。?
?
今天我們就來討論一下LeNet的模型建立及實現。?
先來看一下LeNet的結構圖。由圖中可得到其結構分別為輸入層、s1、c1、s2、c2和輸出層。?
其中,輸入層到s1是卷積運算;輸入層輸入數據batch_size個樣本,每個樣本是一個28?28的圖片,s1層濾波器大小為5?5,濾波器為20個。?
經過卷積運算,s1的特征圖數目為20個,每個特征圖的大小為(28?5+1)?(28?5+1)=24?24。為什么會是這個樣子呢?這就涉及到卷積運算是怎么回事了。卷積運算一個最重要的特點就是可以使原信號特征增強,并且能降低噪音。具體運算過程,請移步這里。?
?
當計算完第一組5?5區域后(比如計算的是原數據第一行下標0-4,第一列0-4構成的方陣),5?5的濾波器整體向右移動步長=1,那么下一次就是計算原數據第一行下標1-5,第一列0-4的方陣。以此類推,原數據第一行28個數據,那么就會向右移動(28?5+1)次。因此,最終的結果圖大小就是(28?5+1)?(28?5+1)。如何還不太清楚,可以自己手動畫一下,畫一個4*4的原數據,2?2的濾波器,最終生成的圖像大小為(4?2+1)?(4?2+1)。?
?
下面我們計算一下s1層需要訓練的參數個數:s1生成有20個特征圖,每個特征圖的濾波器不同,同一個特征圖的濾波器相同(這不廢話嗎)每個特征圖含24?24個元素,每個元素的生成是由本圖的濾波器與原圖像卷積計算得出。本圖的濾波器含有5?5個W元素+1個b元素(共5?5+1=26個參數)。那么總的計算就是:共有?20?(5?5+1)=520個參數;20?(24?24)?(5?5+1)=299520個連接。
s1層到c1層是下采樣層。計算過程就是將s1的輸出數據作為c1的輸入數據。因此,輸入數據為20個24?24的特征圖。經過采樣大小為2?2感受野的計算后,結果仍然是20個特征圖,每個特征圖變為了12?12。?
?
濾波器的移動是有重疊的。而下采樣是無重疊的。采樣計算過程如下:結果特征圖中的每一個元素對應輸入特征圖中的2?2元素,將2?2區域元素累加,然后乘以一個可訓練參數,再加上一個偏置值,最后通過sigmoid函數計算得到一個數值。然后結果圖的下一個元素就是輸入圖中下一個2?2區域,以此類推。最終原圖是24?24的,經過下采樣之后,就變成12?12了(就是行和列分別是原來的一半。因此整體就是原來的1/4)。?
?
總體就是在特征圖數目不變的前提下,將每個特征圖進行了類似壓縮的操作,這樣元素個數大大降低,這就是所謂的下采樣。同樣我們計算一下c1層需要訓練的參數個數:c1仍然生成20個特征圖,每個特征圖含12?12個元素,每個元素的生成是由原圖的2?2區域元素累加,然后乘以1個可訓練參數+1個偏置b參數。相當于本圖的濾波器含有1?1個W元素+1個b元素(共1?1+1=2個參數)。那么總的計算就是:共有20?(1?1+1)=40個參數;20?(12?12)?(2?2+1)=14400個連接。。
c1到s2是卷積運算;輸入是batch_size個樣本,每個樣本是20個12?12的特征圖,s2層是50個濾波器,每個濾波器5?5大小。然后經過卷積運算,生成50個8?8的特征圖。【c1與s2的全連接,但尚不清楚是如何計算的,因此未能算出其參數和連接。從其他資料經驗看,應該有20?50?(5?5+1)=26000個參數;20?50?(8?8)?(5?5+1)=1664000個連接。】
s2層到c3層是下采樣層,輸入是50個8?8特征圖,采用2?2感受野,結果是50個4?4特征圖。
c3層到輸出層經過一個MLP層。輸入數據是將c3的4維輸出轉換為2維矩陣,即把后三維50?4?4轉換為行數據,送入MLP的隱層,激活函數是tanh,輸出是batch_size;然后再把結果送入MLP的LR層,經過softmax函數,將結果分為10類。
至此,整個模型介紹完畢。經過注釋后的代碼GitHub下載 CSDN免費下載,包含2個文件:mlp.py和LeNetConvPoolLayer.py。?
?
肯定會有紕漏和錯誤,歡迎指出,共同進步。
參考目錄:?
1.?官方教程?
2.?Deep Learning(深度學習)學習筆記整理系列之(七)
總結
以上是生活随笔為你收集整理的深度学习(DL)与卷积神经网络(CNN)学习随笔-05-基于Python的LeNet之CNN的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度学习(DL)与卷积神经网络(CNN)
- 下一篇: 机器学习实战笔记(Python实现)-0