卷首語:對(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:
簡介:2012年ImageNet圖像識(shí)別大賽冠軍,可以說是許多后續(xù)DCNN模型開發(fā)的參照范例

??? 如上圖,我們可以看出該模型分為上下兩組通道同時(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):

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):

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):

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ù))