經典網絡AlexNet介紹

AlexNet經典網絡由Alex Krizhevsky、Hinton等人在2012年提出,發表在NIPS,論文名爲《ImageNet Classification with Deep Convolutional Neural Networks》,論文見:http://www.cs.toronto.edu/~hinton/absps/imagenet.pdf ,論文中的網絡結構截圖如下:

上圖中有時看起來不是很直觀,下圖是來自https://www.learnopencv.com/understanding-alexnet/ 中的截圖:

注意:論文中原始輸入大小爲224*224*3,上圖中輸入大小爲227*227*3,使用227*227替換爲224*224更有意義。

AlexNet網絡:

(1).激活函數使用ReLU替代Tanh或Sigmoid加快訓練速度,解決網絡較深時梯度彌散問題。關於ReLU介紹參考:https://blog.csdn.net/fengbingchun/article/details/73872828

(2).訓練時使用Dropout隨機忽略一部分神經元,以避免過擬合。關於Dropout介紹參考:https://blog.csdn.net/fengbingchun/article/details/89286485

(3).使用重疊最大池化(Overlapping Max Pooling),避免平均池化時的模糊化效果;並且讓步長比池化核的尺寸小,提升特徵豐富性。filter的步長stride小於filter的width或height。一般,kernel(filter)的寬和高是相同的,深度(depth)是和通道數相同的。

(4).使用LRN對局部神經元的活動創建競爭機制,使得其中響應比較大的值變得相對更大,並抑制其它反饋較小的神經元,增強了模型泛化能力。LRN只對數據相鄰區域做歸一化處理,不改變數據的大小和維度。關於LRN介紹參考:https://blog.csdn.net/fengbingchun/article/details/112393884

(5).數據擴充(Data Augmentation):訓練時隨機地從256*256的原始數據中截取227*227大小的區域,水平翻轉;光照變換。增加了數據量,大大減少過擬合,提升泛化能力。

(6).多GPU並行運算。

AlexNet輸入是一種屬於1000種不同類別的一張BGR圖像,大小爲227*227,輸出是一個向量,大小爲1000。輸出向量的第i個元素值被解釋爲輸入圖像屬於第i類的概率。因此,輸出向量的所有元素的總和爲1。

假如輸入圖像大小爲n*n,過濾器(filter)爲f*f,padding爲p,步長(stride)爲s,則輸出大小爲:如果商不是整數,向下取整,即floor函數。參考:https://blog.csdn.net/fengbingchun/article/details/80262495

AlexNet架構:5個卷積層(ConvolutionReLULRNPooling)+3個全連接層(InnerProductReLUDropout),predict時對各層進行說明:參照https://github.com/BVLC/caffe/blob/master/models/bvlc_alexnet/deploy.prototxt

(1).輸入層(Input):圖像大小227*227*3。如果輸入的是灰度圖,它需要將灰度圖轉換爲BGR圖。訓練圖大小需要爲256*256,否則需要進行縮放,然後從256*256中隨機剪切生成227*227大小的圖像作爲輸入層的輸入。

(2).卷積層1+ReLU+LRN:使用96個11*11的filter,stride爲4,padding爲0,輸出爲55*55*96,96個feature maps,訓練參數(11*11*3*96)+96=34944。

(3).最大池化層:filter爲3*3,stride爲2,padding爲0,輸出爲27*27*96,96個feature maps。

(4).卷積層2+ReLU+LRN:使用256個5*5的filter,stride爲1,padding爲2,輸出爲27*27*256,256個feature maps,訓練參數(5*5*96*256)+256=614656。

(5).最大池化層:filter爲3*3,stride爲2,padding爲0,輸出爲13*13*256,256個feature maps。

(6).卷積層3+ReLU:使用384個3*3的filter,stride爲1,padding爲1,輸出爲13*13*384,384個feature maps,訓練參數(3*3*256*384)+384=885120。

(7).卷積層4+ReLU:使用384個3*3的filter,stride爲1,padding爲1,輸出爲13*13*384,384個feature maps,訓練參數(3*3*384*384)+384=1327488。

(8).卷積層5+ReLU:使用256個3*3的filter,stride爲1,padding爲1,輸出爲13*13*256,256個feature maps,訓練參數(3*3*384*256)+256=884992。

(9).最大池化層:filter爲3*3,stride爲2,padding爲0,輸出爲6*6*256,256個feature maps。

(10).全連接層1+ReLU+Dropout:有4096個神經元,訓練參數(6*6*256)*4096=37748736。

(11).全連接層2+ReLU+Dropout:有4096個神經元,訓練參數4096*4096=16777216。

(12).全連接層3:有1000個神經元,訓練參數4096*1000=4096000。

(13).輸出層(Softmax):輸出識別結果,看它究竟是1000個可能類別中的哪一個。

train(https://github.com/BVLC/caffe/blob/master/models/bvlc_alexnet/train_val.prototxt)可視化結果(http://ethereon.github.io/netscope/quickstart.html )如下:

predict可視化結果如下:

GitHubhttps://github.com/fengbingchun/NN_Test

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