第一層卷積層1,卷積核的數量為96;第二層卷積層2,卷積的數量為256個;第三層卷積3, 輸入為第二層的輸出,卷積核數為384;第四層卷積4,輸入為第三層的輸出,卷積核數為384;第五層卷積5, 輸入為第四層的輸出,卷積核數為256。
本教學操作環境:windows7系統、Dell G3電腦。
AlexNet網絡,是2012年ImageNet競賽冠軍得主Hinton和他的學生Alex Krizhevsky設計的。在那年之後,更多的更深的神經網路被提出,例如優秀的vgg,GoogleLeNet。其官方提供的資料模型,準確率達到57.1%,top 1-5 達到80.2%. 這項對於傳統的機器學習分類演算法而言,已經相當的出色.
網路結構解析
上圖所示是caffe中alexnet的網路結構,採用是兩台GPU伺服器,所有會看到兩個流程圖。 AlexNet的網路模型解讀如下表:
#解讀如下:
第一层:卷积层1,输入为 224×224×3 224 \times 224 \times 3224×224×3的图像,卷积核的数量为96,论文中两片GPU分别计算48个核; 卷积核的大小为 11×11×3 11 \times 11 \times 311×11×3; stride = 4, stride表示的是步长, pad = 0, 表示不扩充边缘;卷积后的图形大小是怎样的呢? wide = (224 + 2 * padding - kernel_size) / stride + 1 = 54height = (224 + 2 * padding - kernel_size) / stride + 1 = 54dimention = 96然后进行 (Local Response Normalized), 后面跟着池化pool_size = (3, 3), stride = 2, pad = 0 最终获得第一层卷积的feature map最终第一层卷积的输出为 第二层:卷积层2, 输入为上一层卷积的feature map, 卷积的个数为256个,论文中的两个GPU分别有128个卷积核。卷积核的大小为:5×5×48 5 \times 5 \times 485×5×48; pad = 2, stride = 1; 然后做 LRN, 最后 max_pooling, pool_size = (3, 3), stride = 2; 第三层:卷积3, 输入为第二层的输出,卷积核个数为384, kernel_size = (3×3×256 3 \times 3 \times 2563×3×256), padding = 1, 第三层没有做LRN和Pool 第四层:卷积4, 输入为第三层的输出,卷积核个数为384, kernel_size = (3×3 3 \times 33×3), padding = 1, 和第三层一样,没有LRN和Pool 第五层:卷积5, 输入为第四层的输出,卷积核个数为256, kernel_size = (3×3 3 \times 33×3), padding = 1。然后直接进行max_pooling, pool_size = (3, 3), stride = 2;第6,7,8层是全连接层,每一层的神经元的个数为4096,最终输出softmax为1000,因为上面介绍过,ImageNet这个比赛的分类个数为1000。全连接层中使用了RELU和Dropout。
用caffe 自帶的繪圖工具( caffe/python/draw_net.py) 和caffe/models/bvlc_alexnet/目錄下面的train_val.prototxt繪製的網路結構圖如下圖:
python3 draw_net.py --rankdir TB ../models/bvlc_alexnet/train_val.prototxt AlexNet_structure.jpg
##演算法創新點
(1)成功地使用ReLU作為CNN的激活函數,並驗證其效果在較深的網絡超過了Sigmoid,成功解決了Sigmoid在網絡較深時的梯度彌散問題。雖然ReLU激活函數在很久之前就被提出了,但直到AlexNet的出現才將其發揚光大。 (2)訓練時使用Dropout隨機忽略一部分神經元,以避免模型過度擬合。 Dropout雖有單獨的論文論述,但AlexNet將其實用化,透過實踐證實了它的效果。 AlexNet中主要是最後幾個全連接層使用了Dropout。 (3)在CNN中使用重疊的最大池化。先前CNN普遍使用平均池化,AlexNet全部使用最大池化,避免平均池化的模糊化效果。而AlexNet中提出讓步長比池化核的尺寸小,這樣池化層的輸出之間會有重疊和覆蓋,提升了特徵的豐富性。 (4)提出了LRN層,對局部神經元的活動創建競爭機制,使得其中響應比較大的值變得相對更大,並抑制其他反饋較小的神經元,增強了模型的泛化能力。 (5)多GPU訓練,可以增大網路訓練規模.(6)百萬級ImageNet資料影像輸入.在AlexNet用到的Data Augmentation方式有三種:平移變換(crop);反射變換(flip);光與彩色變換(color jittering):先對圖片進行隨機平移,然後水平翻轉.測試時,先對左上,右上,左下,右下和中間做5次平移變換,然後翻轉之後對結果求平均.歸納總結為:使用多個GPU進行訓練;
準備資料集,修改Alexnet網路的train.prototxt,配置solver,deploy.prototxt文件,新建train .sh腳本,即可開始訓練。
更多電腦相關知識,請造訪
常見問題以上是詳解alexnet網路結構的詳細內容。更多資訊請關注PHP中文網其他相關文章!