TensorFlow学习笔记(二十八)CNN的9大模型之AlexNet
本文出自NIPS2012,作者是大神Alex Krizhevsky,屬于多倫多大學Hinton組。
概述
本文提出的神經網絡結構被成為AlexNet,在我最近的研究學習中發現,這一結構及其變種在很多任務中都有使用,回過頭來重溫一下這篇論文仍然是有必要的。歸根到底,本文網絡結構相對較淺,而且能夠提取到比較豐富的特征,而很多任務的數據集無法達到ImageNet的規模,使用AlexNet是比較好的特征提取方法。本文相對較“老”,其中的很多技術早已耳熟能詳,有興趣的可以去閱讀相關資料。
結構
AlexNet有5個卷積層和3個全連接層,作者發現移除任意一層都會降低最終的效果。網絡結構如圖:
這個網絡前面5層是卷積層,后面三層是全連接層,最終softmax輸出是1000類。具體分析第一層:
輸入圖片為224*224*3,卷積核大小為11*11*3,步長為4,輸出為55*55*96。
ReLU
AlexNet使用ReLU代替了傳統的激活函數,而現在ReLU已經廣泛地使用在了各種CNN結構中。關于ReLU這里已經沒必要講了,在2012年算是新穎的技術,到今天已經是遍地開花了。
Multiple GPU
AlexNet使用兩塊GTX580顯卡進行訓練,兩塊顯卡只需要在特定的層進行通信,當今的深度學習已經基本都是在顯卡上完成的。兩塊GPU各訓練網絡的一部分,在第二個卷積層和全連接層才需要互相通信。
在卷積層之間還需要加上Local Response Normalization和Overlap Pooling。
Local Response Normalization
ReLU本來是不需要對輸入進行標準化,但本文發現進行局部標準化能提高性能。
bix,y=aix,y/(k+α∑j=max(0,i?n/2)min(N?1,i+n/2)(ajx,y)2)
其中aix,y代表在feature map中第i個卷積核(x,y)坐標處經過了ReLU激活函數的輸出,這個式子的含義就是一個值和它前后的n個值做標準化。k,n,α,β都是超參數,本文由驗證集確定為k=2,n=5,α=10?4,β=0.75。求和發生在feature map中,相同位置(x,y)的n個相鄰kernel map上。其中N是卷積核的總數,符號max和min是為了表示邊緣幾層的標準化方式。
Overlap Pooling
一般的Pooling是不重疊的,而AlexNet使用的Pooling是可重疊的,也就是說,在池化的時候,每次移動的步長小于池化的邊長。AlexNet池化的大小為3*3的正方形,每次池化移動步長為2,這樣就會出現重疊。
總體而言,AlexNet網絡的結構如下:
減小過擬合
AlexNet有6000萬個參數,需要考慮過擬合的問題。
數據增強
對圖片進行一些變換可以增大數據集。第一種方法是:原始圖片大小為256*256,在圖片上隨機選取224*224的小塊進行訓練,還可以這些小塊進行水平翻轉進一步增加數據量。另一種方法是使用PCA改變訓練圖像RGB通道的像素值。
Dropout
這個方法現在也是大量使用。Dropout將隱層輸出以一定的概率置0,這個神經元就不參與前向和后向傳播,就如同在網絡中刪除了一樣。Dropout也可以看成是一種模型組合,每個樣本都是不一樣的網絡結構。Dropout減少了神經元之間的共適應關系(co-adaptation),一個神經元不再依賴另一個神經元,強迫網絡學習到更加魯棒的特征表示。
訓練
使用SGD進行訓練,batch大小為128,momentum為0.9,weight decay為0.0005。迭代公式:
vi+1:=0.9?vi?0.0005???wi?????L?w|wi?Di wi+1:=wi+vi+1
在兩塊GTX580上花費了6天時間。
結果
在ILSVRC-2010上,top-1錯誤率為37.5%,top-5錯誤率為17.0%。比較有趣的是對96個11*11*3的卷積和進行可視化:
可以看到這些卷積核學習到了很多和頻率、方向相關的特征,而且在第一個GPU上大多是沒有顏色,而第二個是有顏色的,這樣的結果和初始化值無關。神經網絡最后一層4096維的向量可以作為圖像的高級特征,這樣的特征可以用于其他的任務中。
原文翻譯:http://blog.csdn.net/liumaolincycle/article/details/50496499
其中,在DL開源實現caffe的model樣例中,它也給出了alexnet的復現,具體網絡配置文件如下https://github.com/BVLC/caffe/blob/master/models/bvlc_reference_caffenet/train_val.prototxt:接下來本文將一步步對該網絡配置結構中各個層進行詳細的解讀(訓練階段):
1. conv1階段DFD(data flow diagram):
2. conv2階段DFD(data flow diagram):
3. conv3階段DFD(data flow diagram):
4. conv4階段DFD(data flow diagram):
5. conv5階段DFD(data flow diagram):
6. fc6階段DFD(data flow diagram):
7. fc7階段DFD(data flow diagram):
8. fc8階段DFD(data flow diagram):
總結
以上是生活随笔為你收集整理的TensorFlow学习笔记(二十八)CNN的9大模型之AlexNet的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TensorFlow学习笔记(二十七)C
- 下一篇: Java中定义实例变量时指定初始化值顺序