?[技術觀點]CNN matlab版 學習筆記(六): Alexnet各層的解釋與作用
本文主要是對以下幾個博客學習與擴展:
1.(AlexNet結構詳解)
http://blog.csdn.net/shenziheng1/article/details/702340432.(神經網路模型之AlexNet的一些總結) http://www.cnblogs.com/gongxijun/p/6027747.html3.(深度學習之圖像分類模型AlexNet解讀)http://blog.csdn.net/sunbaigui/article/details/39938097
上述三個博客已經詳細結構了他們的結構,本文對於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% dropout23 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 可以參照如下鏈接
http://cs231n.github.io/neural-networks-2/
第一個卷積階段:
圖示中的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通道的。
http://cs231n.github.io/convolutional-networks/#conv
代碼如下: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(http://blog.csdn.net/xbinworld/article/details/45619685)中一段話解釋的比較好:
這個圖有點點特殊的地方是卷積部分都是畫成上下兩塊,意思是說吧這一層計算出來的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 |