CNN模型Alexnet

        2012年,Imagenet比賽冠軍的model——Alexnet,它證明了CNN在複雜模型下的有效性,然後GPU實現使得訓練在可接受的時間範圍內得到結果,推動了有監督DL的發展。

模型結構見下圖

 

        圖中卷積部分都是畫成上下兩塊,意思是說把這一層計算出來的feature map分開,但是前一層用到的數據要看連接的虛線,如圖中input層之後的第一層第二層之間的虛線是分開的,是說二層上面的128map是由一層上面的48map計算的,下面同理;而第三層前面的虛線是完全交叉的,就是說每一個192map都是由前面的128+128=256map同時計算得到的。

模型組成

  • 輸入層
  • 5個卷積層
  • 3個全鏈接層

其中3個卷積層進行了最大池化

模型主要結構: 輸入數據—>卷積、池化、ReLu激活—>卷積、池化、ReLu激活—>卷積、ReLu激活—>卷積、ReLu激活—>卷積、池化、ReLu激活—>全連接、ReLu激活、droupout—>全連接、ReLu激活、droupout—>輸出

AlexNet的具體架構如下所示:

層 

類型 特徵圖 尺寸 卷積核尺寸 步長  填充 激活函數

OUT  

全連接  - 1000 - - Softmax
F9 全連接 - 4096  -  - - Relu
F8 全連接 - 4096  -  - - Relu

C7 

卷積 256 13×13 3×3 1 SAME Relu
C6 卷積 384 13×13 3×3 1 SAME Relu
C5 卷積 384 13×13 3×3 1 SAME Relu
S4 最大池化 256 13×13 3×3 2 VALID -
C3 卷積 256 27×27 5×5 1 SAME Relu
S2 最大池化 96 27×27 3×3 2 VALID -
C1 卷積 96 55×55 11×11 4 SAME Relu
In 輸入 3 224×224 - - - -

        Alexnet有一個特殊的計算層–LRN層,是對當前層的輸出結果做平滑處理,是深度學習訓練時的一種提高準確度的技術方法。LRN一般是在激活、池化後進行的一種處理方法。Alexnet中LRN層對局部神經元的活動創建競爭機制,使得其中響應比較大的值變得相對更大,並抑制其他反饋較小的神經元,增強了模型的泛化能力

AlexNet 各層的詳細描述

輸入層: 輸入大小爲224 x 224的3通道圖像

第1層:con - relu - pooling - LRN:卷積層(卷積、池化)

 

第一層輸入數據爲原始的227*227*3的圖像,這個圖像被11*11*3的卷積核進行卷積運算,卷積覈對原始圖像的每次卷積都生成一個新的像素。卷積核沿原始圖像的x軸方向和y軸方向兩個方向移動,移動的步長是4個像素。因此,卷積核在移動的過程中會生成(227-11)/4+1=55個像素(227個像素減去11,正好是54,即生成54個像素,再加上被減去的11也對應生成一個像素),行和列的55*55個像素形成對原始圖像卷積之後的像素層。共有96個卷積核,會生成55*55*96個卷積後的像素層。96個卷積核分成2組,每組48個卷積核。對應生成2組55*55*48的卷積後的像素層數據。這些像素層經過relu1單元的處理,生成激活像素層,尺寸仍爲2組55*55*48的像素層數據。

這些像素層經過pool運算(池化運算)的處理,池化運算的尺度爲3*3,運算的步長爲2,則池化後圖像的尺寸爲(55-3)/2+1=27。 即池化後像素的規模爲27*27*96;然後經過歸一化處理,歸一化運算的尺度爲5*5;第一卷積層運算結束後形成的像素層的規模爲27*27*96。分別對應96個卷積核所運算形成。這96層像素層分爲2組,每組48個像素層,每組在一個獨立的GPU上進行運算。

反向傳播時,每個卷積覈對應一個偏差值。即第一層的96個卷積覈對應上層輸入的96個偏差值。

第2層:conv - relu - pool - LRN:卷積層(卷積、池化)

第二層輸入數據爲第一層輸出的27*27*96的像素層,爲便於後續處理,每幅像素層的左右兩邊和上下兩邊都要填充2個像素;27*27*96的像素數據分成27*27*48的兩組像素數據,兩組數據分別再兩個不同的GPU中進行運算。每組像素數據被5*5*48的卷積核進行卷積運算,卷積覈對每組數據的每次卷積都生成一個新的像素。卷積核沿原始圖像的x軸方向和y軸方向兩個方向移動,移動的步長是1個像素。因此,卷積核在移動的過程中會生成(27-5+2*2)/1+1=27個像素。(27個像素減去5,正好是22,在加上上下、左右各填充的2個像素,即生成26個像素,再加上被減去的5也對應生成一個像素),行和列的27*27個像素形成對原始圖像卷積之後的像素層。共有256個5*5*48卷積核;這256個卷積核分成兩組,每組針對一個GPU中的27*27*48的像素進行卷積運算。會生成兩組27*27*128個卷積後的像素層。這些像素層經過relu2單元的處理,生成激活像素層,尺寸仍爲兩組27*27*128的像素層。

這些像素層經過pool運算(池化運算)的處理,池化運算的尺度爲3*3,運算的步長爲2,則池化後圖像的尺寸爲(57-3)/2+1=13。 即池化後像素的規模爲2組13*13*128的像素層;然後經過歸一化處理,歸一化運算的尺度爲5*5;第二卷積層運算結束後形成的像素層的規模爲2組13*13*128的像素層。分別對應2組128個卷積核所運算形成。每組在一個GPU上進行運算。即共256個卷積核,共2個GPU進行運算。

反向傳播時,每個卷積覈對應一個偏差值。即第一層的96個卷積覈對應上層輸入的256個偏差值

第3層:conv - relu:卷積層

第三層輸入數據爲第二層輸出的2組13*13*128的像素層;爲便於後續處理,每幅像素層的左右兩邊和上下兩邊都要填充1個像素;2組像素層數據都被送至2個不同的GPU中進行運算。每個GPU中都有192個卷積核,每個卷積核的尺寸是3*3*256。因此,每個GPU中的卷積核都能對2組13*13*128的像素層的所有數據進行卷積運算。卷積覈對每組數據的每次卷積都生成一個新的像素。卷積核沿像素層數據的x軸方向和y軸方向兩個方向移動,移動的步長是1個像素。因此,運算後的卷積核的尺寸爲(13-3+1*2)/1+1=13(13個像素減去3,正好是10,在加上上下、左右各填充的1個像素,即生成12個像素,再加上被減去的3也對應生成一個像素),每個GPU中共13*13*192個卷積核。2個GPU中共13*13*384個卷積後的像素層。這些像素層經過relu3單元的處理,生成激活像素層,尺寸仍爲2組13*13*192像素層,共13*13*384個像素層

第4層:conv-relu:卷積層

第四層輸入數據爲第三層輸出的2組13*13*192的像素層;爲便於後續處理,每幅像素層的左右兩邊和上下兩邊都要填充1個像素;2組像素層數據都被送至2個不同的GPU中進行運算。每個GPU中都有192個卷積核,每個卷積核的尺寸是3*3*192。因此,每個GPU中的卷積核能對1組13*13*192的像素層的數據進行卷積運算。卷積覈對每組數據的每次卷積都生成一個新的像素。卷積核沿像素層數據的x軸方向和y軸方向兩個方向移動,移動的步長是1個像素。因此,運算後的卷積核的尺寸爲(13-3+1*2)/1+1=13(13個像素減去3,正好是10,在加上上下、左右各填充的1個像素,即生成12個像素,再加上被減去的3也對應生成一個像素),每個GPU中共13*13*192個卷積核。2個GPU中共13*13*384個卷積後的像素層。這些像素層經過relu4單元的處理,生成激活像素層,尺寸仍爲2組13*13*192像素層,共13*13*384個像素層

第5層:conv - relu - pool:卷積層(卷積、池化)

第五層輸入數據爲第四層輸出的2組13*13*192的像素層;爲便於後續處理,每幅像素層的左右兩邊和上下兩邊都要填充1個像素;2組像素層數據都被送至2個不同的GPU中進行運算。每個GPU中都有128個卷積核,每個卷積核的尺寸是3*3*192。因此,每個GPU中的卷積核能對1組13*13*192的像素層的數據進行卷積運算。卷積覈對每組數據的每次卷積都生成一個新的像素。卷積核沿像素層數據的x軸方向和y軸方向兩個方向移動,移動的步長是1個像素。因此,運算後的卷積核的尺寸爲(13-3+1*2)/1+1=13(13個像素減去3,正好是10,在加上上下、左右各填充的1個像素,即生成12個像素,再加上被減去的3也對應生成一個像素),每個GPU中共13*13*128個卷積核。2個GPU中共13*13*256個卷積後的像素層。這些像素層經過relu5單元的處理,生成激活像素層,尺寸仍爲2組13*13*128像素層,共13*13*256個像素層。

2組13*13*128像素層分別在2個不同GPU中進行池化(pool)運算處理。池化運算的尺度爲3*3,運算的步長爲2,則池化後圖像的尺寸爲(13-3)/2+1=6。 即池化後像素的規模爲兩組6*6*128的像素層數據,共6*6*256規模的像素層數據

第6層:fc - relu - dropout:全鏈接層

第六層輸入數據的尺寸是6*6*256,採用6*6*256尺寸的濾波器對第六層的輸入數據進行卷積運算;每個6*6*256尺寸的濾波器對第六層的輸入數據進行卷積運算生成一個運算結果,通過一個神經元輸出這個運算結果;共有4096個6*6*256尺寸的濾波器對輸入數據進行卷積運算,通過4096個神經元輸出運算結果;這4096個運算結果通過relu激活函數生成4096個值;並通過drop運算後輸出4096個本層的輸出結果值。

由於第六層的運算過程中,採用的濾波器的尺寸(6*6*256)與待處理的feature map的尺寸(6*6*256)相同,即濾波器中的每個係數只與feature map中的一個像素值相乘;而其它卷積層中,每個濾波器的係數都會與多個feature map中像素值相乘;因此,將第六層稱爲全連接層。

第五層輸出的6*6*256規模的像素層數據與第六層的4096個神經元進行全連接,然後經由relu6進行處理後生成4096個數據,再經過dropout6處理後輸出4096個數據。

這裏有一層特殊的dropout層,在alexnet中是說在訓練的以1/2概率使得隱藏層的某些neuron的輸出爲0,這樣就丟到了一半節點的輸出,BP的時候也不更新這些節點

第7層: fc - relu - dropout:全鏈接層

第六層輸出的4096個數據與第七層的4096個神經元進行全連接,然後經由relu7激活函數進行處理後生成4096個數據,再經過dropout7處理後輸出4096個數據

第8層:fc - softmax:輸出層

 

第七層輸出的4096個數據與第八層的1000個神經元進行全連接,經過訓練後輸出被訓練的數值

Alexnet網絡中各個層發揮的作用如下表所述:

算法 作用
ReLU、多個CPU 提高訓練速度
重疊pool池化 提高精度、不容易產生過擬合
局部響應歸一化 提高精度
數據增益、Dropout 減少過擬合

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章