CNN-卷积神经网络

【模型】AlexNet模型结构与配置

作者 : 老饼 发表日期 : 2023-07-28 10:52:45 更新日期 : 2024-01-19 10:35:06
本站原创文章,转载请说明来自《老饼讲解-深度学习》www.bbbdata.com



AlexNet是由Alex Krizhevsky、Ilya Sutskever和Geoffrey Hinton在2012年提出一种深度卷积神经网络。

AlexNet是第一个在ImageNet挑战赛上取得显著成功的深度学习模型,也带火了它所使用的ReLU、Dropout等技术,

本文详细介绍AlexNet卷积神经网络在原论文中的模型结构,包括每一层的具体运算细节




   01. AlexNet神经网络结构的简介   



本节简单介绍AlexNet和AlexNet的结构




    AlexNet简介    


AlexNet是什么
AlexNet是一个用于图像类别识别的CNN深度学习模型
它由Hinton和他的学生Alex Krizhevsky设计,并在2012年ImageNet竞赛中由于效果卓越,一战成名

 关于AlexNet的实际实现
由于AlexNet是2012年的作品,当时计算力低下,所以AlexNet采用的是双核计算的结构
在学习时我们可以原汁原汁的学习AlexNet这种最初的设计,但实际使用中,就需要略加改善,
因为现在的计算机算力已经不再需要分核计算,一般会去掉双核结构,以方便实现
✍️AlexNet原文:
 
AlexNet原文为《ImageNet Classification with Deep Convolutional Neural Networks》




     AlexNet结构概述    


在AlexNet论文中AlexNet的结构图如下
 AlexNet原文模型结构图 
将上述结构图简化后,示图如下:
 AlexNet模型简化结构图
  AlexNet的输入是224×224×3的图片,输出是1×1000的概率向量P,
 第i个输出Pi代表图片属于类别i的概率
可以看到,在原文中AlexNet由双核构成,每个核都有8层,
 前五层是卷积层,后三层是全连接层
双核之间除了个别层会交换数据,大部分时候是独立的
最后,输出层汇聚双核的数据,训练一个全连接层并进行softmax后作为输出





   02. AlexNet神经网络结构的详述   



本节详细解释AlexNet每一层的详细结构与运算过程


       


     AlexNet-C1层     


AlexNet-C1层的运算示图如下:
 
AlexNet模型简化结构图-C1
  C1卷积层的具体计算过程如下:
 
C1卷积层
      C1卷积层的输入:
224×224×3的图像                                                                             
         C1卷积层的运算:1. 卷积:使用2组48个11×11×3,步幅为4,填充为2,的卷积核进行卷积运算
                                               卷积后的结果为2组[(224+4-11)/4+1]×[(224+4-11)/4+1]×48=55×55×48的输出
                       2. ReLu:将卷积结果进行ReLu                                                
          3. 归一化:将ReLu后的结果进行局部归一化                
  4. 池化:使用3×3,步幅为2的MaxPool进行池化   
                           池化后的结果为2组[(55-3)/2+1]×[(55-3)/2+1]×48=27×27×48的输出
       C1卷积层的输出:2组27×27×48的特征图                                                                       




     AlexNet-C2层     


AlexNet-C2层的运算示图如下:
 AlexNet模型简化结构图-C2
C2卷积层的具体计算过程如下:
 
C2卷积层
C2卷积层的输入:
C2卷积层的输入为C1卷积层的输出                                                 
 即C2卷积层的输入为2组27×27×48的特征图     
                 C2卷积层的运算:1. 卷积:对每组各自使用128个5×5×48的卷积核,进行步幅为1,填充为2的卷积
                                                   卷积后的结果为2组[(27+4-5)/1+1]×[(27+4-5)/1+1]×128=27×27×128的输出 
         
 2. ReLu:将卷积结果进行ReLu                                         
        3. 归一化:将ReLu后的结果进行局部归一化              
   4. 池化:使用3×3,步幅为2的MaxPool进行池化    
                               池化后得到的结果为2组[(27-3)/2+1]×[(27-3)/2+1]×128=13×13×128的输出
 C2卷积层的输出:2组13×13×128的特征图                                                                



     AlexNet-C3层     


AlexNet-C3层的运算示图如下:
 AlexNet模型简化结构图-C3
C3卷积层的具体计算过程如下:
 
C3卷积层
C3卷积层的输入:
C3卷积层的输入为C2卷积层两组输出的合并结果                            
                  即C3卷积层的输入为13×13×128*2=13×13×256的特征图 
           
C3卷积层的运算:1. 卷积:对每组各自使用192个3×3×256的卷积核,进行步幅为1,填充为1的卷积 
                                                  卷积后的结果为2组[(13+2-3)/1+1]×[(13+2-3)/1+1]×192=13×13×192的输出 
       2. ReLu:将卷积结果进行ReLu                                
  C3卷积层的输出:2组13×13×192的特征图                                                                 



     AlexNet-C4层     


AlexNet-C4层的运算示图如下:
 
AlexNet模型简化结构图-C4
C4卷积层的具体计算过程如下:
 
C4卷积层
C4卷积层的输入:
C4卷积层的输入为C3卷积层的两组输出                                         
      即C4卷积层的输入为2组13×13×192的特征图      
                     C4卷积层的运算:1. 卷积:对每组各自使用192个3×3×192的卷积核,进行步幅为1,填充为1的卷积   
                                                 卷积后的结果为2组[(13+2-3)/1+1]×[(13+2-3)/1+1]×192=13×13×192的输出 
        2. ReLu:将卷积结果进行ReLu                                 
 C4卷积层的输出:2组13×13×192的特征图                                                                
           C4卷积层的总输出个数为13×13×192=64896              




     AlexNet-C5层     


AlexNet-C5层的运算示图如下:
 
AlexNet模型简化结构图-C5
C5卷积层的具体计算过程如下:
 
C5卷积层
C5卷积层的输入:
C5卷积层的输入为C4卷积层的两组输出                                         
       即C5卷积层的输入为2组13×13×192的特征图   
               
C5卷积层的运算:1. 卷积:对每组各自使用128个3×3×192的卷积核,进行步幅为1,填充为1的卷积计算
                                                   卷积后的结果为2组[(13+2-3)/1+1]×[(13+2-3)/1+1]×128=13×13×128的输出 
          2. ReLu:将卷积结果进行ReLu                                    
3. 池化:使用3×3,步幅为2的MaxPool进行池化  
                             池化后的Size为[(13-3)/2+1]×[(13-3)/2+1]×128=6×6×128 
 C5卷积层的输出:2组6×6×128的输出                                                                       
 C5池化层的总输出个数为6×6×128×2=9216    



     AlexNet-F6层     


F6是全连接层,它的运算过程如下:
 
AlexNet模型简化结构图-F6
F6全连接层的具体计算过程如下:
 
F6全连接层
         F6全连接层的输入:
F6全连接层的输入是C5池化层的两组输出合并并展平的结果                   
        即F6全连接层的输入为6*6*128*2×1=9216×1的输 
 F6全连接层的运算:使用两组输出Size为2048×1的全连接运算,激活函数为ReLu            
具体运算如下:
 
其中,这里的上标代表层数,下表代表组数
W为2048×9216的权重矩阵  
B为2048×1的阈值列向量    
y为2048×1的列向量          
 F6全连接层的输出:F6层输出2组2048×1的向量                                                          
  F6层的总输出个数为2048*1*2=4096          



      AlexNet-F7层     


F7是全连接层,它的运算过程如下:
 
AlexNet模型简化结构图-F7
 
F7全连接层的具体计算过程如下:
 
F7全连接层
F7全连接层的输入:
F7全连接层的输入是F6全连接层的2组输出合并的结果                   
          
即F7全连接层的输入为2048*1*2×1=4096×1的输入  
 
 F7全连接层的运算:使用两组输出Size为2048×1的全连接运算,激活函数为ReLu              
 具体运算如下:
 
其中,这里的上标代表层数,下表代表组数
W为2048×4096的权重矩阵  
B为2048×1的阈值列向量    
y为2048×1的列向量          

 F7全连接层的输出:F7层输出2组2048×1的向量                                                          
   F7层的总输出个数为2048*1*2=4096           



     AlexNet-F8层     


F8是全连接层,它的运算过程如下:
 AlexNet模型简化结构图-F8
 
F8全连接层的具体计算过程如下:
 
F8全连接层
F8全连接层的输入:
F8全连接层的输入是F7全连接层的2组输出合并的结果                  
              F8全连接层的运算:1. 全连接运算:使用两组输出Size为1000×1的全连接运算,激活函数为ReLu
                             具体运算如下:
                                       
                                         
其中,W为1000×4096的权重矩阵          
                                        B为1000×1的阈值列向量
                                        y为1000×1的列向量      
                                               2. softmax运算:对ReLu后的结果进行SoftMax,得到属于每个类别的概率 
 F8全连接层的输出:得到1000×1的输出向量                                                               
            F8层的总输出个数为1000                             




     ✍️关于AlexNet中涉及的相关运算     


AlexNet共涉及了池化运算、卷积运算、ReLu函数和局部响应归一化

池化运算可参考文章《》      
卷积运算可参考文章《》      
ReLu函数可参考文章《》     
局部响应归一化可参考文章《》
✍️备注:关于局部响应归一化
局部响应归一化是AlexNet自己提出的一种归一化方法,它应用于AlexNet的C1、C2层
局部响应归一化后来被他人使用时效果并不好,一般被其它归一化方法所替代




   03. AlexNet的配置列表   



为方便快捷理解,本节展示AlexNet的运算过程与配置列表



      AlexNet的运算与配置列表     


AlexNet原文中的双核模式的配置列表如下:
 AlexNet模型配置表 
从配置列表可以较简洁地看到AlexNet的整个运算过程







   附件-关于AlexNet网络结构的关键译文   


由于网络上各种教程所述的结构各有所差异,
现将AlexNet原文中关于网络结构的部分进行摘录与翻译如下,
以校对上述结构就是原文中所述结构
  AlexNet网络结构的关键译文     
《ImageNet Classification with Deep Convolutional Neural Networks》3.5节译文如下
Now we are ready to describe the overall architecture of our CNN.
现在,我们开始描述我们CNN的结构                     
As depicted in Figure2,the net contains eight layers with weights;
如图二所示,网络包含8个带权重的层                     
the first five are convolutional and the remaining three arefully-connected.
前五层是卷积层,后三层是全连接层                        
The output of the last fully-connected layer is fed to a 1000-way softmax which produces a distribution over the 1000 class labels.
最后一个全连接层的输出被送到一个1000通道的softmax中,以便输出1000个类别的分布
Our network maximizes the multinomial logistic regression objective,which is equivalent to maximizing the average across training cases of the log-probability of the correct label under the prediction distribution.
我们的网络最大化多类别逻辑回归目标函数,这相当于最大化训练样本预测分布正确的对数概率的均值.
The kernels of the second,fourth,and fifth convolutional layers are connected only to those kernel maps in the previous layer which reside on the same GPU. 
第二、四、五卷积层的卷积核只与前层同一个CPU的映射结果连接
The kernels of the third  convolutional layer are connected to all kernel maps in the second layer.
第三层卷积层的卷积核与第二层所有映射结果连接
The neurons in the fully-connected layers are connected to all neurons in the previous layer.
全连接层的神经元与前层的所有神经元连接
Response-normalization layers follow the first and second convolutional layers.
第一、二卷积层的后面跟随着一个响应归一化层
Max-pooling layers,of the kind described in Section 3.4,follow both response-normalization layers as well as the fifth convolutionallayer.
响应归一化层与第五层后面,跟随着一个3.4节所描述的最大池化层
The ReLU non-linearity is applied to the output of every convolutional and fully-connectedlayer.
非线性映射ReLu应用于每一个卷积层和全连接层
The first convolutional layer filters the 224×224×3 input image with 96 kernels of size 11×11×3 with a stride of 4 pixels(this is the distance between the receptive field centers of neighboring neurons in a kernel map).
第一个卷积层以96个11×11×3的卷积核对224×224×3的输入图片进行步幅为4(这是在一个卷积核映射中,相邻神经元的感受野中心之间的距离)的卷积
The second convolutional layer takes as input the(response-normalized and pooled)output of the first convolutional layer and filters it with 256 kernels of size 5×5×48.
第二个卷积层以第一个卷积层(局部归一化并池化后)的输出作为输入,并以256个5×5×48的卷积核对其进行卷积。
The third,fourth,and fifth convolutional layers are connected to one another without any intervening pooling or normalization layers.
第三、四、五个卷积层彼此相连,它们之间没有介入任何池化、归一化层。
The third convolutional layer has 384 kernels of size 3×3×256 connected to the(normalized,pooled)outputs of the second convolutional layer.
第三个卷积层以384个3×3×256的卷积核连接到第二个卷积层(归一化、池化后)的输出
The fourth convolutional layer has 384 kernels of size3×3×192,and the fifth convolutional layer has 256 kernels of size 3×3×192.
第四个卷积层有384个3×3×192的卷积核,第五个卷积层有256个3×3×192的卷积核
The fully-connected layers have 4096 neurons each.
每个全连接层都有4096个神经元











 End 






联系老饼