首頁  >  文章  >  詳解alexnet網路結構

詳解alexnet網路結構

醉折花枝作酒筹
醉折花枝作酒筹原創
2021-07-02 11:55:126964瀏覽

第一層卷積層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%. 這項對於傳統的機器學習分類演算法而言,已經相當的出色.

詳解alexnet網路結構

網路結構解析

詳解alexnet網路結構

上圖所示是caffe中alexnet的網路結構,採用是兩台GPU伺服器,所有會看到兩個流程圖。 AlexNet的網路模型解讀如下表:

詳解alexnet網路結構

詳解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

詳解alexnet網路結構

##演算法創新點

(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次平移變換,然後翻轉之後對結果求平均.

歸納總結為:

    ##使用ReLU啟動函數;
  1. 提出Dropout防止過擬合;
  2. 使用資料擴充功能增強資料集(Data augmentation);
水平翻轉影像、隨機裁切、平移變換、顏色變換、光照變換等

使用多個GPU進行訓練;
將上層的結果依照通道維度拆分為2份,分別送入2個GPU,如上一層輸出的27×27×96的像素層(被分成兩組27×27×48的像素層放在兩個不同GPU中運算);

    LRN局部歸一化的使用;
  1. 使用重疊池化(3*3的池化核)。
Caffe框架下訓練

準備資料集,修改Alexnet網路的train.prototxt,配置solver,deploy.prototxt文件,新建train .sh腳本,即​​可開始訓練。

更多電腦相關知識,請造訪

常見問題

欄位!

以上是詳解alexnet網路結構的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn