1、概述

AlexNet是2012年ImageNet竞赛冠军获得者Hinton和他的学生Alex Krizhevsky设计的。也是在那年之后,更多的更深的神经网路被提出,比如优秀的VGG,GoogleNet,resnet。其官方提供的数据模型,准确率达到57.1%,top-5 达到80.2%. 这项对于传统的机器学习分类算法而言,已经相当的出色。
      论文原文:http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf

2、网络结构

整体结构为:

精简版的结构可表示为:

各层的详细描述:

(1)conv1阶段

输入数据:227×227×3

卷积核:11×11×3;步长:4;数量(也就是输出个数):96
      卷积后数据:55×55×96 (原图N×N,卷积核大小n×n,卷积步长大于1为k,输出维度是(N-n)/k+1)
      relu1后的数据:55×55×96
      Max pool1的核:3×3,步长:2
      Max pool1后的数据:27×27×96
      norm1:local_size=5 (LRN(Local Response Normalization) 局部响应归一化)
      最后的输出:27×27×96

AlexNet采用了Relu激活函数,取代了之前经常使用的S函数和T函数,Relu函数也很简单:

ReLU(x) = max(x,0)

AlexNet另一个创新是LRN(Local Response Normalization) 局部响应归一化,LRN模拟神经生物学上一个叫做 侧抑制(lateral inhibitio)的功能,侧抑制指的是被激活的神经元会抑制相邻的神经元。LRN局部响应归一化借鉴侧抑制的思想实现局部抑制,使得响应比较大的值相对更大,提高了模型的泛化能力。LRN只对数据相邻区域做归一化处理,不改变数据的大小和维度。LRN概念是在AlexNet模型中首次提出,在GoogLenet中也有应用,但是LRN的实际作用存在争议,如在2015年Very Deep Convolutional Networks for Large-Scale Image Recognition 论文中指出LRN基本没什么用。

AlexNet还应用了Overlapping(重叠池化),重叠池化就是池化操作在部分像素上有重合。池化核大小是n×n,步长是k,如果k=n,则是正常池化,如果 k<n, 则是重叠池化。官方文档中说明,重叠池化的运用减少了top-5和top-1错误率的0.4%和0.3%。重叠池化有避免过拟合的作用。

(2) conv2阶段

输入数据:27×27×96

卷积核:5×5;步长:1;数量(也就是输出个数):256
      卷积后数据:27×27×256 (做了Same padding(相同补白),使得卷积后图像大小不变。)
      relu2后的数据:27×27×256
      Max pool2的核:3×3,步长:2
      Max pool2后的数据:13×13×256 ((27-3)/2+1=13 )
      norm2:local_size=5 (LRN(Local Response Normalization) 局部响应归一化)
      最后的输出:13×13×256

在AlexNet的conv2中使用了same padding,保持了卷积后图像的宽高不缩小。

(3)conv3阶段

输入数据:13×13×256

卷积核:3×3;步长:1;数量(也就是输出个数):384
      卷积后数据:13×13×384 (做了Same padding(相同补白),使得卷积后图像大小不变。)
      relu3后的数据:13×13×384
      最后的输出:13×13×384

conv3层没有Max pool层和norm层

(4)conv4阶段

输入数据:13×13×384

卷积核:3×3;步长:1;数量(也就是输出个数):384
      卷积后数据:13×13×384 (做了Same padding(相同补白),使得卷积后图像大小不变。)
      relu4后的数据:13×13×384
      最后的输出:13×13×384

conv4层也没有Max pool层和norm层

(5)conv5阶段

输入数据:13×13×384

卷积核:3×3;步长:1;数量(也就是输出个数):256
      卷积后数据:13×13×256 (做了Same padding(相同补白),使得卷积后图像大小不变。)
      relu5后的数据:13×13×256
      Max pool5的核:3×3,步长:2
      Max pool2后的数据:6×6×256 ((13-3)/2+1=6 )
      最后的输出:6×6×256

conv5层有Max pool,没有norm层

(6)fc6阶段

输入数据:6×6×256

全连接输出:4096×1
      relu6后的数据:4096×1
      drop out6后数据:4096×1
      最后的输出:4096×1

AlexNet在fc6全连接层引入了drop out的功能。dropout是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率(一般是50%,这种情况下随机生成的网络结构最多)将其暂时从网络中丢弃(保留其权值),不再对前向和反向传输的数据响应。注意是暂时,对于随机梯度下降来说,由于是随机丢弃,故而相当于每一个mini-batch都在训练不同的网络,drop out可以有效防止模型过拟合,让网络泛化能力更强,同时由于减少了网络复杂度,加快了运算速度。还有一种观点认为drop out有效的原因是对样本增加来噪声,变相增加了训练样本。

(7)fc7阶段

输入数据:4096×1
      全连接输出:4096×1
      relu7后的数据:4096×1
      drop out7后数据:4096×1
      最后的输出:4096×1

(8)fc8阶段

输入数据:4096×1
      全连接输出:1000
      fc8输出一千种分类的概率。

3、AlexNet与在其之前的神经网络相比改进

(1)数据增广(Data Augmentation增强)

常用的数据增强的方法有 水平翻转、随机裁剪、平移变换、颜色、光照、对比度变换。 增强图片数据集最简单和最常用的方法是在不改变图片核心元素(即不改变图片的分类)的前提下对图片进行一定的变换,比如在垂直和水平方向进行一定的平移,翻转等。

AlexNet用到的第一种数据增益的方法:是原图片大小为256 * 256中随机的提取224 * 224的图片,以及他们水平方向的映像。

第二种数据增益的方法就是在图像中每个像素的R、G、B值上分别加上一个数,用到 方法为PCA。对于图像每个像素,增加以下量 :
                                                                     

pi 是特征向量,λi是特征值,αi是N(0,0.1)高斯分布中采样得到的随机值。此方案名义上得到自然图像的重要特性,也就是说,目标是不随着光照强度和颜色而改变的。此方法将top-1错误率降低了1%。

(2) Dropout
      有效防止过拟合。结合多个模型的预测值是减少错误的有效方法,但是对于训练时间用好几天的大型神经网络太耗费时间。Dropout是有效的模型集成学习方法,具有0.5的概率将隐藏神经元设置输出为0。运用了这种机制的神经元不会干扰前向传递也不影响后续操作。因此当有输入的时候,神经网络采用不同的结构,但是这些结构都共享一个权重,这就减少了神经元适应的复杂性。测试时,用0.5的概率随机失活神经元。dropout减少了过拟合,也使收敛迭代次数增加一倍。

(3) Relu激活函数

用ReLU代替了传统的simod或者T激活函数,使得训练更快。一般神经元的激活函数会选择sigmoid函数或者tanh函数,然而Alex发现在训练时间的梯度衰减方面,这些非线性饱和函数要比非线性非饱和函数慢很多。在AlexNet中用的非线性非饱和函数是f=max(0,x),即ReLU。实验结果表明,要将深度网络训练至training error rate达到25%的话,ReLU只需5个epochs的迭代,但tanh单元需要35个epochs的迭代,用ReLU比tanh快6倍。

(4)Local Response Normalization 局部响应归一化

参考了生物学上神经网络的侧抑制的功能,做了临近数据归一化,提高来模型的泛化能力。ReLU本来是不需要对输入进行标准化,但本文发现进行局部标准化能提高性能。
                                                      

其中a代表在feature map中第i个卷积核(x,y)坐标经过了ReLU激活函数的输出,n表示相邻的几个卷积核。N表示这一层总的卷积核数量。k, n, αβ是hyper-parameters,他们的值是在验证集上实验得到的,其中k = 2,n = 5,α = 0.0001,β = 0.75。这种归一化操作实现了某种形式的横向抑制,这也是受真实神经元的某种行为启发。

(5)Overlapping Pooling 重叠池化
      重叠池化减少了系统的过拟合,分别将top-5和top-1的错误率减少了0.4%和0.3%。pooling层是相同卷积核领域周围神经元的输出。池化层可以被认为是由间隔s个像素的池化单元网格组成,每个池化单元概括了以池化单元的位置为中心的大小z×z的邻域。然而,Alex说还有的情况,也就是带交叠的Pooling,顾名思义这指Pooling单元在总结提取特征的时候,其输入会受到相邻pooling单元的输入影响,也就是提取出来的结果可能是有重复的(对max pooling而言)。而且,实验表示使用 带交叠的Pooling的效果比的传统要好,在训练阶段有避免过拟合的作用。

(6)多GPU并行训练

AlexNet将网络分成了上下两部分,两部分的结构完全一致,这两部分由两块不同的GPU来训练,提高了训练速度。为提高运行速度和提高网络运行规模,作者采用双GPU的设计模式。并且规定GPU只能在特定的层进行通信交流。其实就是每一个GPU负责一半的运算处理。与在一个GPU上训练的每个卷积层有一半核的网络比较,该方案将我们的top-1与top-5误差率分别减少了1.7%与1.2%。值得注意的是,虽然one-GPU网络规模只有two-GPU的一半,但其实这两个网络其实并非等价的。

Alexnet模型代码参考:

  • github代码:https://github.com/stephen-v/tensorflow_alexnet_classify
  • 对应上述的github代码详解:https://www.cnblogs.com/vipyoumay/p/7686230.html
  • github代码2:https://github.com/kratzert/finetune_alexnet_with_tensorflow(不过没有验证模型代码,模型构建和训练跟上述基本一致)

其他可学习链接:

  • AlexNet详细解读(本文第三部分描述参考来源):https://blog.csdn.net/qq_24695385/article/details/80368618
  • Alexnet解读:https://blog.csdn.net/u014135752/article/details/79978097
  • Alexnet原文翻译:https://blog.csdn.net/hit2015spring/article/details/53649183

Alexnet网络模型介绍相关推荐

  1. 使用pytorch搭建AlexNet网络模型

    使用pytorch搭建AlexNet网络模型 AlexNet详解 AlexNet是2012年ISLVRC 2012(ImageNet Large Scale Visual Recognition Ch ...

  2. KVM虚拟化技术之virt-manager使用及KVM虚拟化平台网络模型介绍

    一.使用virt-manager创建和管理虚拟机 1.使用VNC Viewer连接进入虚拟化平台主机 2.打开终端输入virt-manager命令启动virt-manager虚拟机管理界面 #virt ...

  3. 【图像分类】卷积神经网络之AlexNet网络模型实现花卉图像识别(附代码和数据集,PyTorch框架)

    写在前面: 首先感谢兄弟们的关注和订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌. 在上一篇博文中我们对AlexNet网络模型的结构 ...

  4. K8S实战集训第一课 Ansible自动化部署k8s、弹性伸缩、Helm包管理、k8s网络模型介绍

    Ansible自动化部署K8S集群 一.Ansible自动化部署K8S集群 1.1 Ansible介绍 Ansible是一种IT自动化工具.它可以配置系统,部署软件以及协调更高级的IT任务,例如持续部 ...

  5. Alexnet网络模型在cifar-10数据集上的实现(基于tensorflow-gpu)

    最近根据github和tensoflow源代码中的关于Alexnet的一些代码,完成了一个在cifar-10训练集上进行训练和测试的Alexnet模型(算是半抄半改吧,哈哈!!).实现在测试集上的ac ...

  6. AlexNet网络介绍

    本文转自红黑联盟https://www.2cto.com/kf/201608/533035.html 1LeNet-5 1.1局限性 早在1989年,Yann LeCun (现纽约大学教授)和他的同事 ...

  7. AlexNet网络模型

    2012年,Hinton的学生 Alex Krizhevsky在< 深度卷积神经网络的ImageNet分类>一文中提出了深度卷积神经网络模型 AlexNet,是LeNet的一种更深更宽的版 ...

  8. Leader/Follower多线程网络模型介绍

     之前分享过<轻量级web server Tornado代码分析>,介绍了目前我们采用nginx + tornado的方式搭建升级.配管.数据中心等各类服务组建客户端迭代体系.最近注意 ...

  9. 卷积神经网络之AlexNet网络模型学习

    ImageNet Classification with Deep Convolutional Neural Networks 论文理解  在ImageNet LSVRC-2010上首次使用大型深度卷 ...

最新文章

  1. vuecli 编译后部署_基于vue-cli 打包时抽离项目相关配置文件详解
  2. 实时智能决策引擎在蚂蚁金服风险管理中的实践
  3. 阿里专家讲中台:技术中台-分布式架构在蚂蚁金服的实践
  4. encache学习教程
  5. JS正则表达式元字符
  6. 微信支付java helloworld_10行代码搞定微信支付(Java版)
  7. ubuntu 20.04修改数据源配置
  8. 理解php中的yield
  9. 从有界到无界,腾讯新一代企业网引领安全创新
  10. Qt文档阅读笔记-QVariant::value()与qvariant_cast解析及使用
  11. magento 输出关联产品
  12. 支持百万级TPS,Kafka是怎么做到的?
  13. PHP一阶段 html+css+js 练习题汇总
  14. C/C++ 工具函数 —— 大端模式和小端模式的互换
  15. 常用的英文文献引用格式
  16. Bus Hound错误提示解释
  17. 分享一下我制作的Bat批处理程序-PC Tools(含源码)
  18. codeforces 136A(Presents) Java
  19. 英特尔计划发布代号为Spring Crest的神经网络处理器芯片,测试部署AI模型速度更快
  20. 微信小店和微信小商店的区别?如何建立怎么开通?

热门文章

  1. Mac 抓包工具Charles4破解版,安装使用
  2. Vue拖拽组件开发实例
  3. matlab已知圆心和半径怎么作圆,matlab根据圆心和半径画圆三种方式
  4. Java语言,有n个人围成一圈,顺序排号1...n。从第一个人开始报数(从1到3报数),凡报到3的人立刻退出圈子,输入参数为n,计算并返回最后留下的是第几号。
  5. 南京计算机考研培训,南京考研培训班十大靠谱排名
  6. 成为08奥运的志愿者
  7. Android入门第1天-Android Studio的安装
  8. 【opencv-c++】cv::calcHist计算直方图
  9. 严寒中传递温暖 回家路油站相伴
  10. SpringMVC通过拦截URL控制Mybatis切换数据源