小伙1小時敲出AlexNet,深度學習tensorflow原創體驗,代碼可運行
卷首語:對於上次詳談CNN的文章,我看到很多負面評論。哎呀我滴個小心臟,不甘心的我也請了我的老友(軟體工程專業)作為讀者對上一篇文章進行了評判,只見他猛地將一口老白乾咽下,眼神迷離的看向遠方緩緩吐出一個字「懵」……
就這表情
於此,我也進行了及其深刻的反思,本著寫文章應對讀者負責,在盡量提高質量的同時,一定一定要再降低一些門檻(門檻??在作者的鍵盤下是不存在的!)
本文範圍:
AlexNet-8案例分析與實現
閱前須知:
本文分析方面會站在兩個GPU通道的基礎上進行分析講解,代碼實現採用單GPU進行模擬傳播,代碼中的參數並非最優,請讀者適當加以思考進行改進
AlexNet:
簡介:2012年ImageNet圖像識別大賽冠軍,可以說是許多後續DCNN模型開發的參照範例
AlexNet
如上圖,我們可以看出該模型分為上下兩組通道同時卷積處理。沒錯,AlexNet的作者利用兩台GPU伺服器對其進行模型訓練。
模型分析:
上圖所示,本模型的深度為八層:五層卷積,三層全連接。
可能產生誤解的關鍵詞:
通道:深度
LRN:局部相應歸一化
卷積類
(在卷積類這裡,因為卷積核在兩個GPU通道上的工作原理基本一樣,所以我會只寫一個通道的例子)
Layer-1:
第一層
輸入:長*寬*色深(224*224*3)
卷積:長*寬*通道*步長(11*11*96*4),這裡的卷積結果被一分為二,後續將會在兩個獨立的GPU上進行同步操作
激活函數:ReLU
池化:最大池化長*寬*步長(3*3*2)
備註:添加LRN
輸出:長*寬*通道(27*27*96),且分為兩組,每組分別為(27*27*48)
TensorFlow代碼實現:
(註:實際上,圖片參數為256*256*3,Paper作者將其進行了「數據增強」,隨機截取224*224大小的圖像進行優化訓練。但在我看了很多與之相關的博文與Paper後,多數人都認為輸入層應採取227*227*3的形式,可以完整的被卷積,從而免去全零填充的過程)
Layer-2:
第二層
輸入:長*寬*通道(27*27*48)
卷積:長*寬*通道*步長(5*5*128*1),且採用全零填充,兩個GPU進行同步卷積
激活函數:ReLU
池化:最大池化長*寬*步長(3*3*2)
備註:添加LRN
輸出:長*寬*通道(13*13*128)
TensorFlow代碼實現:
代碼
Layer-3:
第三層
輸入:長*寬*通道(13*13*128)
卷積:長*寬*通道*步長(3*3*192*1),且採用全零填充,兩個GPU進行同步卷積,輸出結果交叉運算
激活函數:ReLU
輸出:長*寬*通道(13*13*192)
TensorFlow代碼實現:
(註:在當時我學習此模型時的筆記上認為此步驟主要是為了交換特徵,類似於特徵歸類,兩個GPU通道圖區的特徵也主要分為兩類)
Layer-4:
第四層
輸入:長*寬*通道(13*13*192)
卷積:長*寬*通道*步長(3*3*192*1),且採用全零填充,兩個GPU進行同步卷積
激活函數:ReLU
輸出:長*寬*通道(13*13*192)
TensorFlow代碼實現:
代碼
Layer-5:
第五層
輸入:長*寬*通道(13*13*192)
卷積:長*寬*通道*步長(3*3*128*1),且採用全零填充,兩個GPU進行同步卷積
激活函數:ReLU
池化:最大池化長*寬*步長(3*3*2)
輸出:長*寬*通道(6*6*128)
代碼
全連接層
Layer-6:
第六層
輸入:將特徵矩陣拉成一維的List,且分為兩組,(6*6*256)/2=4096
全連接層:shape = (4096,2048),兩組GPU同步計算
激活函數:ReLU
備註:添加dropout
輸出:節點*通道(2048*2)
TensorFlow代碼實現:
(註:因為此模型的連接點太多,很容易造成冗餘與過擬合問題,作者在此處使用拋出率為0.5的dropout,驗證了其在深度神經網路中的效果)
Layer-7:
第七層
輸入:兩組2048的節點參數
全連接層:shape = (2048,2048),兩組GPU同步計算
激活函數:ReLU
備註:添加dropout
輸出:節點*通道(2048*2)
TensorFlow代碼實現:
代碼
Layer-8:
第八層
輸入:兩組2048的節點參數在通道上進行拼接,組成4096的節點參數
全連接層:shape = (4096,1000),則一GPU進行計算即可
備註:最後一層採用softmax
輸出:經softmax後的答案,1000種
TensorFlow代碼實現:
代碼
卷尾語:
至此,我們的經典模型AlexNet-8的分析就結束了,眾所周知卷積網路與全連接網路相比最大的優勢就是權值共享導致的參數量大幅度降低,但本模型的參數量依舊很龐大。雖然Paper的作者是使用的兩個GPU進行運算的,但是我們完全可以用TensorFlow或Keras進行一個GPU甚至CPU進行模擬,當然CPU的速度要慢的很多。
AlexNet現在大多都做為教學上的一種經典案例,輝煌的時代基本上已經過去了。不過,我們現在仍會在VGG等仍在使用的模型中看到他的影子,可以說留給後人的影響是非常巨大的。
最後,歡迎大家在下方評論中提出一些改進性的意見或者建議,我會逐漸的完善自己的寫作風格,盡量讓大家都能看懂,都能學會,都能說出一句:這小子寫的還蠻不賴的!
(未完待續)
作者:昂鈦客AI
鏈接:https://www.jianshu.com/p/a904ebc8541a
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。


TAG:昂鈦客AI |