Tensorflow实现经典CNN网络AlexNet

1、概念

        AlexNet在ILSVRC-2012的比赛中获得top5错误率15.3%的突破(第二名为26.2%),其原理来源于2012年Alex的论文《ImageNet Classification with Deep Convolutional Neural Networks》,这篇论文是深度学习火爆发展的一个里程碑和分水岭,加上硬件技术的发展,深度学习还会继续火下去。

2、AlexNet网络结构

        由于受限于当时的硬件设备,AlexNet在GPU粒度都做了设计,当时的GTX 580只有3G显存,为了能让模型在大量数据上跑起来,作者使用了两个GPU并行,并对网络结构做了切分,如下:

        Tensorflow实现经典CNN网络AlexNet_第1张图片

3、网络结构

        3.1 Input输入层

        输入为224×224×3的三通道RGB图像,为方便后续计算,实际操作中通过padding做预处理,把图像变成227×227×3。

       3.2 卷积层

该层由:卷积操作 + Max Pooling + LRN(后面详细介绍它)组成。 

  • 卷积层:由96个feature map组成,每个feature map由11×11卷积核在stride=4下生成,输出feature map为55×55×48×2,其中55=(227-11)/4+1,48为分在每个GPU上的feature map数,2为GPU个数; 
  • 激活函数:采用ReLU; 
  • Max Pooling:采用stride=2且核大小为3×3(文中实验表明采用2×2的非重叠模式的Max Pooling相对更容易过拟合,在top 1和top 5下的错误率分别高0.4%和0.3%),输出feature map为27×27×48×2,其中27=(55-3)/2+1,48为分在每个GPU上的feature map数,2为GPU个数; 
  • LRN:邻居数设置为5做归一化。 

最终输出数据为归一化后的:27×27×48×2。

        3.3 C2卷积层

该层由:卷积操作 + Max Pooling + LRN组成 

  • 卷积层:由256个feature map组成,每个feature map由5×5卷积核在stride=1下生成,为使输入和卷积输出大小一致,需要做参数为2的padding,输出feature map为27×27×128×2,其中27=(27-5+2×2)/1+1,128为分在每个GPU上的feature map数,2为GPU个数; 
  • 激活函数:采用ReLU; 
  • Max Pooling:采用stride=2且核大小为3×3,输出feature map为13×13×128×2,其中13=(27-3)/2+1,128为分在每个GPU上的feature map数,2为GPU个数; 
  • LRN:邻居数设置为5做归一化。 

最终输出数据为归一化后的:13×13×128×2

        3.4 C3卷积层

该层由:卷积操作 + LRN组成(注意,没有Pooling层) 

  • 输入为13×13×256,因为这一层两个GPU会做通信(途中虚线交叉部分) 
  • 卷积层:之后由384个feature map组成,每个feature map由3×3卷积核在stride=1下生成,为使输入和卷积输出大小一致,需要做参数为1的padding,输出feature map为13×13×192×2,其中13=(13-3+2×1)/1+1,192为分在每个GPU上的feature map数,2为GPU个数; 
  • 激活函数:采用ReLU; 

最终输出数据为归一化后的:13×13×192×2。

        3.5 C4卷积层

该层由:卷积操作 + LRN组成(注意,没有Pooling层) 

  • 卷积层:由384个feature map组成,每个feature map由3×3卷积核在stride=1下生成,为使输入和卷积输出大小一致,需要做参数为1的padding,输出feature map为13×13×192×2,其中13=(13-3+2×1)/1+1,192为分在每个GPU上的feature map数,2为GPU个数; 
  • 激活函数:采用ReLU; 

最终输出数据为归一化后的:13×13×192×2。

        3.6 C5卷积层

该层由:卷积操作 + Max Pooling组成 

  • 卷积层:由256个feature map组成,每个feature map由3×3卷积核在stride=1下生成,为使输入和卷积输出大小一致,需要做参数为1的padding,输出feature map为13×13×128×2,其中13=(13-3+2×1)/1+1,128为分在每个GPU上的feature map数,2为GPU个数; 
  • 激活函数:采用ReLU; 
  • Max Pooling:采用stride=2且核大小为3×3,输出feature map为6×6×128×2,其中6=(13-3)/2+1,128为分在每个GPU上的feature map数,2为GPU个数. 

最终输出数据为归一化后的:6×6×128×2。

        3.7 F6全连接层

该层为全连接层 + Dropout 

  • 使用4096个节点; 
  • 激活函数:采用ReLU; 
  • 采用参数为0.5的Dropout操作 

最终输出数据为4096个神经元节点。

        3.8 F7全连接层

该层为全连接层 + Dropout 

  • 使用4096个节点; 
  • 激活函数:采用ReLU; 
  • 采用参数为0.5的Dropout操作 

最终输出为4096个神经元节点。

<

你可能感兴趣的:(python开发,tensorflow,cnn,人工智能,python)