小伙一小時(shí)敲出python深度學(xué)習(xí)框架,AlexNet-8案例分析與實(shí)現(xiàn)

卷首語:對(duì)于上次詳談CNN的文章,我看到很多負(fù)面評(píng)論。哎呀我滴個(gè)小心臟,不甘心的我也請(qǐng)了我的老友(軟件工程專業(yè))作為讀者對(duì)上一篇文章進(jìn)行了評(píng)判,只見他猛地將一口老白干咽下,眼神迷離的看向遠(yuǎn)方緩緩?fù)鲁鲆粋€(gè)字“懵”……


就這表情

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

本文范圍:

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

閱前須知:

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

AlexNet:

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


AlexNet

??? 如上圖,我們可以看出該模型分為上下兩組通道同時(shí)卷積處理。沒錯(cuò),AlexNet的作者利用兩臺(tái)GPU服務(wù)器對(duì)其進(jìn)行模型訓(xùn)練。

模型分析:

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

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

??????? 通道:深度
??????? LRN:局部相應(yīng)歸一化

卷積類

(在卷積類這里,因?yàn)榫矸e核在兩個(gè)GPU通道上的工作原理基本一樣,所以我會(huì)只寫一個(gè)通道的例子)

Layer-1


第一層

輸入:長*寬*色深(224*224*3)
卷積:長*寬*通道*步長(11*11*96*4),這里的卷積結(jié)果被一分為二,后續(xù)將會(huì)在兩個(gè)獨(dú)立 的GPU上進(jìn)行同步操作
激活函數(shù):ReLU
池化:最大池化長*寬*步長(3*3*2)
備注:添加LRN
輸出:長*寬*通道(27*27*96),且分為兩組,每組分別為(27*27*48)

TensorFlow代碼實(shí)現(xiàn):

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

Layer-2


第二層

輸入:長*寬*通道(27*27*48)
卷積:長*寬*通道*步長(5*5*128*1),且采用全零填充,兩個(gè)GPU進(jìn)行同步卷積
激活函數(shù):ReLU
池化:最大池化長*寬*步長(3*3*2)
備注:添加LRN
輸出:長*寬*通道(13*13*128)

TensorFlow代碼實(shí)現(xiàn):

代碼

Layer-3


第三層

輸入:長*寬*通道(13*13*128)
卷積:長*寬*通道*步長(3*3*192*1),且采用全零填充,兩個(gè)GPU進(jìn)行同步卷積,輸出結(jié) 果交叉運(yùn)算
激活函數(shù):ReLU
輸出:長*寬*通道(13*13*192)

TensorFlow代碼實(shí)現(xiàn):

(注:在當(dāng)時(shí)我學(xué)習(xí)此模型時(shí)的筆記上認(rèn)為此步驟主要是為了交換特征,類似于特征歸類,兩個(gè)GPU通道圖區(qū)的特征也主要分為兩類)

Layer-4

第四層

輸入:長*寬*通道(13*13*192)
卷積:長*寬*通道*步長(3*3*192*1),且采用全零填充,兩個(gè)GPU進(jìn)行同步卷積
激活函數(shù):ReLU
輸出:長*寬*通道(13*13*192)

TensorFlow代碼實(shí)現(xiàn):

代碼

Layer-5

第五層

輸入:長*寬*通道(13*13*192)
卷積:長*寬*通道*步長(3*3*128*1),且采用全零填充,兩個(gè)GPU進(jìn)行同步卷積
激活函數(shù):ReLU
池化:最大池化長*寬*步長(3*3*2)
輸出:長*寬*通道(6*6*128)

代碼

全連接層

Layer-6


第六層

輸入:將特征矩陣?yán)梢痪S的List,且分為兩組,(6*6*256)/2=4096
全連接層:shape = (4096,2048),兩組GPU同步計(jì)算
激活函數(shù):ReLU
備注:添加dropout
輸出:節(jié)點(diǎn)*通道(2048*2)

TensorFlow代碼實(shí)現(xiàn):

(注:因?yàn)榇四P偷倪B接點(diǎn)太多,很容易造成冗余與過擬合問題,作者在此處使用拋出率為0.5的dropout,驗(yàn)證了其在深度神經(jīng)網(wǎng)絡(luò)中的效果)

Layer-7

第七層

輸入:兩組2048的節(jié)點(diǎn)參數(shù)
全連接層:shape = (2048,2048),兩組GPU同步計(jì)算
激活函數(shù):ReLU
備注:添加dropout
輸出:節(jié)點(diǎn)*通道(2048*2)

TensorFlow代碼實(shí)現(xiàn):

代碼

Layer-8

第八層

輸入:兩組2048的節(jié)點(diǎn)參數(shù)在通道上進(jìn)行拼接,組成4096的節(jié)點(diǎn)參數(shù)
全連接層:shape = (4096,1000),則一GPU進(jìn)行計(jì)算即可
備注:最后一層采用softmax
輸出:經(jīng)softmax后的答案,1000種

TensorFlow代碼實(shí)現(xiàn):

代碼

卷尾語:

???????? 至此,我們的經(jīng)典模型AlexNet-8的分析就結(jié)束了,眾所周知卷積網(wǎng)絡(luò)與全連接網(wǎng)絡(luò)相比最大的優(yōu)勢(shì)就是權(quán)值共享導(dǎo)致的參數(shù)量大幅度降低,但本模型的參數(shù)量依舊很龐大。雖然Paper的作者是使用的兩個(gè)GPU進(jìn)行運(yùn)算的,但是我們完全可以用TensorFlow或Keras進(jìn)行一個(gè)GPU甚至CPU進(jìn)行模擬,當(dāng)然CPU的速度要慢的很多。

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

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

(未完待續(xù))

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

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

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