?[技術觀點]CNN matlab版 學習筆記(六): Alexnet各層的解釋與作用

本文主要是對以下幾個博客學習與擴展:

1.(AlexNet結構詳解)

blog.csdn.net/shenzihen

2.(神經網路模型之AlexNet的一些總結)

cnblogs.com/gongxijun/p

3.(深度學習

之圖像分類模型AlexNet解讀)

blog.csdn.net/sunbaigui

上述三個博客已經詳細結構了他們的結構,本文對於Alexnet的25層的輸出進行詳細講解,並將部分結果用圖像加以展示。

整個結構大部分分為以下幾部分:

  • imageInputLayer - Image input layer
  • convolutional2dLayer - 2D convolution layer for Convolutional Neural Networks
  • reluLayer - Rectified linear unit (ReLU) layer
  • maxPooling2dLayer - Max pooling layer
  • fullyConnectedLayer - Fully connected layer
  • softmaxLayer - Softmax layer
  • classificationLayer - Classification output layer for a neural network

Alexnet 的網路結構的詳細架構共25層。

代碼如下:

net=alexnet;

net.Layers

輸出結果:

ans =

25x1 Layer array with layers:

1 data Image Input 227x227x3 images with zerocenter normalization

2 conv1 Convolution 96 11x11x3 convolutions with stride [4 4] and padding [0 0]

3 relu1 ReLU ReLU

4 norm1 Cross Channel Normalization cross channel normalization with 5 channels per element

5 pool1 Max Pooling 3x3 max pooling with stride [2 2] and padding [0 0]

6 conv2 Convolution 256 5x5x48 convolutions with stride [1 1] and padding [2 2]

7 relu2 ReLU ReLU

8 norm2 Cross Channel Normalization cross channel normalization with 5 channels per element

9 pool2 Max Pooling 3x3 max pooling with stride [2 2] and padding [0 0]

10 conv3 Convolution 384 3x3x256 convolutions with stride [1 1] and padding [1 1]

11 relu3 ReLU ReLU

12 conv4 Convolution 384 3x3x192 convolutions with stride [1 1] and padding [1 1]

13 relu4 ReLU ReLU

14 conv5 Convolution 256 3x3x192 convolutions with stride [1 1] and padding [1 1]

15 relu5 ReLU ReLU

16 pool5 Max Pooling 3x3 max pooling with stride [2 2] and padding [0 0]

17 fc6 Fully Connected 4096 fully connected layer

18 relu6 ReLU ReLU

19 drop6 Dropout 50% dropout

20 fc7 Fully Connected 4096 fully connected layer

21 relu7 ReLU ReLU

22 drop7 Dropout 50% dropout

23 fc8 Fully Connected 1000 fully connected layer

24 prob Softmax softmax

25 output Classification Output crossentropyex with tench, goldfish, and 998 other classes

輸入圖像代碼如下:

I = imread(peppers.png);

I=imresize(I,[227,227]);%變成輸入圖像要求是[227,227,3]

imshow(I)

接下來對25層的做出詳細解釋:

第1層:

1 data Image Input 227x227x3 images with zerocenter normalization

training1 = activations(net,I,1);

代碼如下:

training1 = activations(net,I,1,OutputAs,channels);

結果如下:

關於zero center normalization 可以參照如下鏈接

cs231n.github.io/neural

第一個卷積階段:

圖示中的pool layer 與norm layer相互調換。但是不影響結果。

第2層:

2 conv1 Convolution 96 11x11x3 convolutions with stride [4 4] and padding [0 0]

得到結果尺寸的注釋:原始圖片為RGB圖像,也就是三個通道的,我們這96個過濾器也是三通道的,也就是我們使用的實際大小規格為11*11*,也就是原始圖像是彩色的,我們提取到特徵也是彩色的,在卷積的時候,我們會依據這個公式來提取特徵圖;[img_size-filter_size]/stride+1=new_feature_size,所以這裡我們得到的特徵圖大小為:[227-11]/4+1=55,注意[ ]表示向下取整,我們得到的新的特徵圖規格為55*55,注意這裡提取到的特徵圖是彩色的,這樣得到了96個55*55大小的特徵圖了,並且是RGB通道的。

cs231n.github.io/convol

代碼如下:training1 = activations(net,I,2,OutputAs,channels);

輸出結果:55*55*96

第3層:3 relu1 ReLU ReLU

激活函數的作用是把卷積後的結果壓縮到某一個固定的範圍,這樣可以一直保持一層一層下去的數值範圍是可控的。比如一些常見的激活函數

· sigmoid:控制在[0, 1]

· tanh:控制在[-1, 1]

· ReLU:控制在[0, 正無窮]

· 還有好多新的激活函數,這兒就不舉例了,知道它們的作用就OK

代碼如下:training1 = activations(net,I,3,OutputAs,channels);

輸出結果:55*55*96

第4層:

4 norm1 Cross Channel Normalization cross channel normalization with 5 channels per element

源碼默認的是Across_Channels,跨通道歸一化,local_size:5 (默認值),表示局部弱化在相鄰五個特徵圖間中求和並且每個值出去這個和。

代碼如下:training1 = activations(net,I,4,OutputAs,channels)

輸出結果:55*55*96;

第5層:

5 pool1 Max Pooling 3x3 max pooling with stride [2 2] and padding [0 0]

內核是3*3大小,該過程就是3*3區域的數據進行處理(求平均,最大/小值,就是區域求均值,區域求最大值,區域求最小值),通過降採樣處理,我們可以得到[55-3]/2+1=27,也就是得到96個27*27的特徵圖,然後,再以這些特徵圖,作為下一輪con2的輸入數據。本例是max

代碼如下:training1 = activations(net,I,5,OutputAs,channels);

輸出結果:27*27*96;

第二個卷積階段:

第6層:

6 conv2 Convolution 256 5x5x48 convolutions with stride [1 1] and padding [2 2]

代碼如下:training1 = activations(net,I,6,OutputAs,channels);

輸出結果:27*27*256

獲得尺寸為27*27*256;問題是輸入為27*27*96;卷積的數量為256個 5x5x48 convolutions

問題2:對於256個 5x5x48 convolutions ,如何和27*27*96做卷積運算才能獲得27*27*256

要確定256個卷積核中的每個卷積核5x5x48 和27*27*96中的哪部分做卷積

答:引用博客的「深度學習方法(五):卷積神經網路CNN經典模型整理Lenet,Alexnet,Googlenet,VGG,Deep Residual Learning(blog.csdn.net/xbinworld中一段話解釋的比較好:

這個圖有點點特殊的地方是卷積部分都是畫成上下兩塊,意思是說吧這一層計算出來的feature map分開,但是前一層用到的數據要看連接的虛線,如圖中input層之後的第一層第二層之間的虛線是分開的,是說二層上面的128map是由一層上面的48map計算的,下面同理;而第三層前面的虛線是完全交叉的,就是說每一個192map都是由前面的128+128=256map同時計算得到的。

第7層:

7 relu2 ReLU ReLU 27*27*256;

ReLU層與第第三層一致,前面一致的部分就予以解釋。

第8層:

8 norm2 Cross Channel Normalization cross channel normalization with 5 channels per element

27*27*256;

第9層:

9 pool2 Max Pooling 3x3 max pooling with stride [2 2] and padding [0 0]

13*13*256

第三個卷積階段:與第一層卷積階段計算方式一樣,合併計算

第10層:

10. conv3 Convolution 384 3x3x256 convolutions with stride [1 1] and padding [1 1]

13*13*384

第11層:

11 relu3 ReLU ReLU

13*13*384

第四個卷積階段:與第二層卷積階段計算方式一樣,分別計算

第12層:

12. conv4 Convolution 384 3x3x192 convolutions with stride [1 1] and padding [1 1]

13*13*384

第13層:

13 relu4 ReLU ReLU

13*13*384

第五個卷積階段 與第二層卷積階段計算方式一樣,分別計算

第14層:

14 conv5 Convolution 256 3x3x192 convolutions with stride [1 1] and padding [1 1]

13*13*256

第15層:

15 relu5 ReLU ReLU

13*13*256

第16層:

16 pool5 Max Pooling 3x3 max pooling with stride [2 2] and padding [0 0]

6*6*256

第6階段全連接層

第17層:

17 fc6 Fully Connected 4096 fully connected layer

4096

這裡使用4096個神經元,對256個大小為6*6特徵圖,進行一個全鏈接,也就是說6*6大小的特徵圖,進行卷積變為一個特增點,然後對於4096個神經元中的一個點,是由256個特徵圖中某些個特徵圖卷積之後得到的特徵點乘以相應的權重之後,再加上一個偏置得到。

第18層:

18 relu6 ReLU ReLU

4096

第19層:

19 drop6 Dropout 50% dropout

進行一個dropout隨機從4096個節點中丟掉一些節點信息(也就是值清0),然後就得到新的4096個神經元。

第七階段:全連接

第20層:

20 fc7 Fully Connected 4096 fully connected layer

4096

第21層:

21 relu7 ReLU ReLU

4096

第22層:

22 drop7 Dropout 50% dropout

4096

第8階段:全連接

第23層:

23 fc8 Fully Connected 1000 fully connected layer

第9階段:輸出

第24層:

24 prob Softmax softmax

第25層:

25 output Classification Output crossentropyex with tench, goldfish, and 998 other classes

1000個,最大值代表的類

CNN的連載筆記,歡迎關注

(一) 工具箱的安裝與測試

(二) Feature extraction using CNN

(三)Perform Transfer Learning to fine-tune a network with your data

(四)Train a Deep Neural Network from Scratch

(五)Object Detection Using Deep Learning

(六)Alexnet各層的解釋與作用

如有任何問題請聯繫我們

您可以發送郵件至

dataintellagr@126.com

或關注微博/知乎、微信後台留言

我們期待您的提問!

微博:數據智農

微信公眾號:數據智農

郵箱:dataintellagr@126.com

編輯|姚雪岩


推薦閱讀:

Matlab GUI「憤怒的小鳥」系列(二)——歪?妖妖零嗎?這裡有人虐鳥
MATLAB學習-2-啟動
CodyNote006:惡意滿滿的什一抽殺率問題
MATLAB--共軛梯度法--優化方法

TAG:卷積神經網路(CNN) | MATLAB |