AlexNet是ImageNet LSVRC 2012比赛中分类效果第一的深度神经网络模型,点击链接下载论文http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf

1.模型的表现及结果

AlexNet模型主要在ILSVRC2010数据集与ILSVRC2012数据集上进行了训练与测试。在2012年的测试集上,模型取得top-5 error 15.3%,比第2名26.2%高了不少。由于ILSVRC2010的测试集的标签可用,AlexNet在2010测试集上[top-1error 37.5%,top-5 error 17.0%],比当时的第一名[top-1 error 45.7%,top-5 error 25.7%]效果好了不少。


2.数据集

ILSVRC2012的数据集约120万张图像,共包含1000个类。对图像数据集进行的预处理包括:

  (a) 统一所有的图像大小为256x256。将图像的短边缩放为256,然后截取缩放后的图像中心256x256的图像;

  (b) 对缩放后的 256*256 训练图像统计均值,并对所有图像减去均值。具体实现时并不像论文所写的计算每个像素的均值,而是统计所有图像的RGB均值[r,g,b],并在训练以及测试时减去这个均值[r,g,b]。网络上有预训练好的AlexNet模型代码,其中训练集的RGB均值为[124., 117., 104.]。

  训练集与测试集的图像不参与均值的计算,但是会进行缩放,并且减去均值。

数据扩增部分采取的操作:

  详见第4部分。


3.网络结构

3.1 AlexNet由8层神经网络层组成,分别是 input -> { 卷积层1 -> 卷积层2 -> 卷积层3 -> 卷积层4 -> 卷积层5 -> FC6 -> FC7 -> FC8 } -> softmax。网络的输入是[N, 227, 227, 3],图像的大小是[227, 227, 3]。

输入层:

输入: [227x227x3]

第1层:conv1 -> relu -> norm1 -> max pool1

conv1:96个11x11 filter, stride=4, pad=0. output=[55x55x96]

max pool1:3x3 filter, stride=2. output=[27x27x96]

第2层:conv2 -> relu -> norm2 -> max pool2

conv2: 256个5x5 filter, stride=1, pad=2. output=[27x24x256]

max pool2: 3x3 filter, stride=2. output=[13x13x256]

第3层:conv3 -> relu

conv3: 384个3x3 filter, stride=1, pad=1. output=[13x13x384]

第4层:conv4 -> relu

conv4: 384个3x3 filter, stride=1, pad=1. output=[13x13x384]

第5层:conv5 -> relu -> max pool5

conv5: 256个3x3 filter, stride=1, pad=1. output=[13x13x256]

max pool5: 3x3 filter, stride=2. output=[6x6x256]

第6层:

FC6 -> relu -> dropout 6, 4096个神经元

第7层:

FC7 -> relu -> dropout 7, 4096个神经元

第8层:

FC8, 1000个神经元

3.2 神经网络层的说明,按照它们的重要程度的顺序进行

(a) Relu非线性

神经元的输出函数一般是tanh(x)或者sigmoid(x),本文使用Relu非线性函数 f(x) = max(0, x). 在利用梯度下降进行训练时,饱和非线性函数(tanh,sigmoid)比非饱和非线性函数(relu)速度更慢。使用relu的深层卷积网络比使用tanh的网络训练要快上几倍。

(b) Training on GPUs

GTX580 GPU内存3GB,在两块这样的GPU上进行训练,利用并行的方式。

(c) Local Response Normalization(LRN)

Relu已经不需要normalization就可以防止饱和现象,但是本文发现LRN依然可以帮助提升模型的泛化性能。本文的LRN如下,

其中 aix,y 含义是第 i 个卷积核在(x,y)处的输出经过 relu 的结果,bix,y 指的是aix,y 经过LRN后的结果。

n是邻近的n个卷积核输出,卷积核的书序是训练之前就人为确定的,N是本层的所有卷积核数目。k,n,α,β是超参数,由验证集决定,训练中使用 k = 2, n = 5, α = 10-4β = 0.75

LRN分别减少模型的top-1 error 1.4%和top-5 error 1.2%。

(d) Overlapping Pooling

常规的pooling都是 z=2, s=2, 本文使用z=3, s=2,所以pooling时会有重叠现象,这减少模型的top-1 error 0.4% 和 top-5 error 0.3%,而且观察到重叠池化不易过拟合。

3.3 损失函数(优化目标)

AlexNet模型的优化目标是 最大化多类逻辑回归,等价于最大化交叉熵(maxmizing the average cross training case of the log-probability of the correct label under the prediction distribution)。


4. 减少过拟合

整个模型大概有6000万的参数,主要采用2种方法减少过拟合。

4.1 数据扩增(Data Augmentation)

减少模型的过拟合最简单与常用的方法就是人工的扩增数据集。本文使用的扩增图像数据的方法计算简单,所以新增的图像无须提前存储在硬盘上(即可以随时生成)。

  第一种是图像平移与水平翻转,训练时,在256x256图像上取 224x224 大小的图像以及它们的水平翻转图像,因此一张图像可以扩展到 (256-224)*(256-224)* 2 = 2048张,数据集可以扩展到2048倍。 实际都是取227x227的图像作为模型的输入,因此2048倍变为(256-227+1)*(256-227+1)* 2 =1800,这样就扩增了数据集1800倍。

  测试时,取 256x256 图像的4个角与中心的224x224图像以及它们的水平翻转图像共10张,输入模型后,将softmax层在这10个图像上的预测平均值作为原图像的预测。

  第二种是改变训练集的图像在RGB通道的值。本文对训练集图像的RGB通道像素执行PCA,将PCA的特征值乘上随机量,随机量是从均值为0,标准差0.1的高斯分布中取的。

原图像 = [p1, p2, p3] [α1, α2, α3]T,加入随机量之后图像 = [p1, p2, p3] [α1λ1, α2λ2, α3λ3]T,λ就是随机量。

4.2 Dropout

训练过程中,以概率p使隐层中的神经元的输出为0,则神经元就被 dropout了,它们的输出不会影响到前向传播,也不会参与BP。每次迭代都有不同的神经元被dropout,可以看作是模型得到不同结构的网络,这些网络共享权重。Dropout使得一个神经元的输出不能依赖于特定的神经元,减少了神经元之间复杂的互适应关系,使得模型学到的特征更加健壮。

测试时,不使用dropout,全部神经元参与预测,但是所有神经元的输出 x 0.5。

本文在全连接层的前2层使用dropout技术,可以缓解过拟合问题。但是dropout使得迭代次数加倍才能收敛。


5. 模型实现的一些细节

5.1 使用SGD优化模型,batch_size=128, momentum=0.9,weight_decay=0.0005,

i 是迭代次数,ν是momentum,ε是学习率,<φL/φω|ωi>是第i个batch Di的关于ωi偏导的平均

5.2 初始化参数

  每层的权重w初始化:均值=0,标准差=0.01的高斯分布

  第2,4,5层,全连接层 的偏差biases初始化:全1

  其余层的偏差biases:全0

5.3 学习率

初始学习率0.01。当验证集精度不再增加时,就手动的将学习率减小10倍,在训练停止前学习率减小了3次(学习率1e-5)。总共进行了90个epoch的训练,在两块NVIDIA GTX580 3GB GPU上面运行了5~6天。


6. 结果

6.1 模型在ImageNet数据集上的效果

6.2 模型评估

第一个图可视化显示了与图像紧邻的卷积核学到的特征。

第2个图显示了图像经过模型后产生的 (FC-7)4096维特征,如果两个图像的4096维特征的欧氏距离比较近,那么模型就认为这两个图像在全局水平上比较相似(内容相似,类别相同等...)。

第1层的96个卷积核直接从图像上学到的特征。由于两个GPU分开连接,GPU1上的卷积核主要学到颜色无关的特征,而GPU2主要学到颜色相关的特征。每次训练都是这种特征差异,而且与随机初始化无关。

左边是ILSVRC-2010的8张图像,每张图像下面的黑色字体是图像的正确标签,紧接着的下面是模型预测的图像的前5个最有可能的标签。红色标签标示模型的预测正确(top-5)。

右边的第一列是ILSVRC-2010测试集的图像,剩下的6列是训练集中的图像,经过模型产生的特征4096维特征(FC-7),与测试集图像的4096维特征的欧氏距离最近的6个图像。

计算两个4096维特征的欧氏距离,计算效率比较低,但是可以训练自动编码机(AE)将长向量压缩为短二维码,这可以作为一个比较好的图像检索方法。


7. 讨论

在视频处理方面使用更深更大的卷积网络,因为视频中包含了静态图像所不具备的丰富的时空信息。

AlexNet模型的解析及tensorflow实现的更多相关文章

  1. flex盒模型 详细解析

    flex盒模型 详细解析 移动端页面布局,采用盒模型布局,效果很好 /* ============================================================    ...

  2. ASP.NET没有魔法——ASP.NET MVC 模型绑定解析(上篇)

    前面文章介绍了ASP.NET MVC中的模型绑定和验证功能,本着ASP.NET MVC没有魔法的精神,本章内容将从代码的角度对ASP.NET MVC如何完成模型的绑定和验证进行分析,已了解其原理. 本 ...

  3. ASP.NET没有魔法——ASP.NET MVC 模型绑定解析(下篇)

    上一篇<ASP.NET没有魔法——ASP.NET MVC 模型绑定解析(上篇)>文章介绍了ASP.NET MVC模型绑定的相关组件和概念,本章将介绍Controller在执行时是如何通过这 ...

  4. 基于Caffe训练AlexNet模型

    数据集 1.准备数据集 1)下载训练和验证图片 ImageNet官网地址:http://www.image-net.org/signup.php?next=download-images (需用邮箱注 ...

  5. AlexNet模型

    AlexNet模型 <ImageNet Classification with Deep Convolutional Neural Networks>阅读笔记 一直在使用AlexNet,本 ...

  6. [阿里DIN] 从模型源码梳理TensorFlow的乘法相关概念

    [阿里DIN] 从模型源码梳理TensorFlow的乘法相关概念 目录 [阿里DIN] 从模型源码梳理TensorFlow的乘法相关概念 0x00 摘要 0x01 矩阵乘积 1.1 matmul pr ...

  7. [阿里DIN]从模型源码梳理TensorFlow的形状相关操作

    [阿里DIN]从模型源码梳理TensorFlow的形状相关操作 目录 [阿里DIN]从模型源码梳理TensorFlow的形状相关操作 0x00 摘要 0x01 reduce_sum 1.1 reduc ...

  8. 吴裕雄 python 神经网络——TensorFlow实现AlexNet模型处理手写数字识别MNIST数据集

    import tensorflow as tf # 输入数据 from tensorflow.examples.tutorials.mnist import input_data mnist = in ...

  9. AlexNet 网络详解及Tensorflow实现源码

    版权声明:本文为博主原创文章,未经博主允许不得转载. 1. 图片数据处理 2. 卷积神经网络 2.1. 卷积层 2.2. 池化层 2.3. 全链层 3. AlexNet 4. 用Tensorflow搭 ...

随机推荐

  1. 阿里社招Java面试题总结——面试官分享

    面试题 1.Java中的内存溢出是如何造成的 2.gc的概念,如果A和B对象循环引用,是否可以被GC? 3.Error.Exception和RuntimeException的区别,作用又是什么? 4. ...

  2. Android开发:为什么我们从来不去感谢开源项目维护者?

    今天我想谈一谈,为什么我们很少去感谢开源项目维护者: 一.这样的项目我也可以做啊 “蛤?这项目对我来说也太简单了吧.” “我一周之内就能做一个更好的版本出来.” 确实,很多人都可以在 Hackatho ...

  3. VS中一些提高编码效率的快捷键

    场景 新手入门,看见大神们在VS中只用键盘就可以完成一系列操作. 整理一些常用的能提高效率的快捷键. 关注公众号霸道的程序猿获取编程相关电子书.教程推送与免费下载. 大量编程视频教程:https:// ...

  4. MockBean 单元测试

    案例一 官方文档:https://docs.spring.io/spring-boot/docs/2.0.4.RELEASE/reference/htmlsingle/ import org.juni ...

  5. Git 从入门到熟练|不敢说精通

    前言 如果有一定版本管理软件基础或使用过 svn 的你,这篇 git 的文章应该是最适合你的.作者也是从 svn 过来,从开始的觉得 git 麻烦,到最后还是感觉 git 是最好用的版本控制软件. 虽 ...

  6. Linux、Windows 和 Mac 中的换行符对比

    原文地址:Linux.Windows 和 Mac 中的换行符对比 博客地址:http://www.moonxy.com 一.前言 经常使用 Window.Linux 等不同操作系统的开发者,在处理文本 ...

  7. git报错,远程克隆和更新不下来解决方法

    报错: error: RPC failed; curl 18 transfer closed with outstanding read data remainingfatal: The remote ...

  8. 《JavaScript DOM 编程艺术》 学习笔记

    目录 <JavaScript DOM 编程艺术> 学习笔记 第一章 js简史 第二章 js语法 准备工作 语法 第三章 DOM DOM中的D DOM中的O DOM中的M 第四章 js图片库 ...

  9. 5分钟了解Prometheus

    Prometheus(译:普罗米修斯)用领先的开源监控解决方案为你的指标和警报提供动力(赋能). 1.  概述 1.1.  Prometheus是什么? Prometheus是一个开源的系统监控和警报 ...

  10. linux环境下Nginx的配置及使用

    切换到目录/usr/local/nginx/sbin,/usr/local为nginx的默认安装目录 #启动 ./nginx #查看命令帮助 ./nginx -h 验证配置文件状态 ./nginx - ...