AlexNet模型分析與實現(xiàn)

卷首語:對于上次詳談CNN的文章,我看到很多負面評論。哎呀我滴個小心臟,不甘心的我也請了我的老友(軟件工程專業(yè))作為讀者對上一篇文章進行了評判,只見他猛地將一口老白干咽下,眼神迷離的看向遠方緩緩吐出一個字“懵”……

就這表情

于此,我也進行了及其深刻的反思,本著寫文章應對讀者負責,在盡量提高質(zhì)量的同時,一定一定要再降低一些門檻(門檻??在作者的鍵盤下是不存在的!

本文范圍:

???? AlexNet-8案例分析與實現(xiàn)

閱前須知:

???? 本文分析方面會站在兩個GPU通道的基礎上進行分析講解,代碼實現(xiàn)采用單GPU進行模擬傳播,代碼中的參數(shù)并非最優(yōu),請讀者適當加以思考進行改進

AlexNet:

簡介:2012ImageNet圖像識別大賽冠軍,可以說是許多后續(xù)DCNN模型開發(fā)的參照范例

AlexNet

??? 如上圖,我們可以看出該模型分為上下兩組通道同時卷積處理。沒錯,AlexNet的作者利用兩臺GPU服務器對其進行模型訓練。

模型分析:

??????? 上圖所示,本模型的深度為八層:五層卷積,三層全連接。

可能產(chǎn)生誤解的關(guān)鍵詞:

通道:深度
LRN:局部相應歸一化

卷積類

(在卷積類這里,因為卷積核在兩個GPU通道上的工作原理基本一樣,所以我會只寫一個通道的例子)

Layer-1

第一層

輸入:長*寬*色深(224*224*3)

卷積:長*寬*通道*步長(11*11*96*4),這里的卷積結(jié)果被一分為二,后續(xù)將會在兩個獨立的GPU上進行同步操作

激活函數(shù):ReLU

池化:最大池化長*寬*步長(3*3*2)

備注:添加LRN

輸出:長*寬*通道(27*27*96),且分為兩組,每組分別為(27*27*48)

TensorFlow代碼實現(xiàn):

(注:實際上,圖片參數(shù)為256*256*3,Paper作者將其進行了“數(shù)據(jù)增強”,隨機截取224*224大小的圖像進行優(yōu)化訓練。但在我看了很多與之相關(guān)的博文與Paper后,多數(shù)人都認為輸入層應采取227*227*3的形式,可以完整的被卷積,從而免去全零填充的過程)

Layer-2

第二層

輸入:長*寬*通道(27*27*48)

卷積:長*寬*通道*步長(5*5*128*1),且采用全零填充,兩個GPU進行同步卷積

激活函數(shù):ReLU

池化:最大池化長*寬*步長(3*3*2)

備注:添加LRN

輸出:長*寬*通道(13*13*128)

TensorFlow代碼實現(xiàn):

代碼

Layer-3

第三層

輸入:長*寬*通道(13*13*128)

卷積:長*寬*通道*步長(3*3*192*1),且采用全零填充,兩個GPU進行同步卷積,輸出結(jié)果交叉運算

激活函數(shù):ReLU

輸出:長*寬*通道(13*13*192)

TensorFlow代碼實現(xiàn):

(注:在當時我學習此模型時的筆記上認為此步驟主要是為了交換特征,類似于特征歸類,兩個GPU通道圖區(qū)的特征也主要分為兩類)

Layer-4

第四層

輸入:長*寬*通道(13*13*192)

卷積:長*寬*通道*步長(3*3*192*1),且采用全零填充,兩個GPU進行同步卷積

激活函數(shù):ReLU

輸出:長*寬*通道(13*13*192)

TensorFlow代碼實現(xiàn):

代碼

Layer-5

第五層

輸入:長*寬*通道(13*13*192)

卷積:長*寬*通道*步長(3*3*128*1),且采用全零填充,兩個GPU進行同步卷積

激活函數(shù):ReLU

池化:最大池化長*寬*步長(3*3*2)

輸出:長*寬*通道(6*6*128)

代碼

全連接層

Layer-6

第六層

輸入:將特征矩陣拉成一維的List,且分為兩組,(6*6*256)/2=4096

全連接層:shape = (4096,2048),兩組GPU同步計算

激活函數(shù):ReLU

備注:添加dropout

輸出:節(jié)點*通道(2048*2)

TensorFlow代碼實現(xiàn):

(注:因為此模型的連接點太多,很容易造成冗余與過擬合問題,作者在此處使用拋出率為0.5的dropout,驗證了其在深度神經(jīng)網(wǎng)絡中的效果)

Layer-7

第七層

輸入:兩組2048的節(jié)點參數(shù)

全連接層:shape = (2048,2048),兩組GPU同步計算

激活函數(shù):ReLU

備注:添加dropout

輸出:節(jié)點*通道(2048*2)

TensorFlow代碼實現(xiàn):

代碼

Layer-8

第八層

輸入:兩組2048的節(jié)點參數(shù)在通道上進行拼接,組成4096的節(jié)點參數(shù)

全連接層:shape = (4096,1000),則一GPU進行計算即可

備注:最后一層采用softmax

輸出:經(jīng)softmax后的答案,1000種

TensorFlow代碼實現(xiàn):

代碼

卷尾語:

至此,我們的經(jīng)典模型AlexNet-8的分析就結(jié)束了,眾所周知卷積網(wǎng)絡與全連接網(wǎng)絡相比最大的優(yōu)勢就是權(quán)值共享導致的參數(shù)量大幅度降低,但本模型的參

數(shù)量依舊很龐大。雖然Paper的作者是使用的兩個GPU進行運算的,但是我們完全可以用TensorFlow或Keras進行一個GPU甚至CPU進行

模擬,當然CPU的速度要慢的很多。

???????? AlexNet現(xiàn)在大多都做為教學上的一種經(jīng)典案例,輝煌的時代基本上已經(jīng)過去了。不過,我們現(xiàn)在仍會在VGG等仍在使用的模型中看到他的影子,可以說留給后人的影響是非常巨大的。

???????? 最后,歡迎大家在下方評論中提出一些改進性的意見或者建議,我會逐漸的完善自己的寫作風格,盡量讓大家都能看懂,都能學會,都能說出一句:這小子寫的還蠻不賴的!

(未完待續(xù))

注:本文原創(chuàng),已售與“昂鈦客AI”

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容