热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

论文笔记AlexNetImageNetClassificationwithDeepConvolutionalNeuralNetworks

Datasets:LabelMe:consistsofhundredsofthousandsoffully-segmentedimagesImageNet:consistsofov

Datasets:

LabelMe: consists of hundreds of thousands of fully-segmented images

ImageNet: consists of over 15 million labeled high-resolution images in over 22000 categories

这篇论文使用的数据集是ImageNet

多余的话:

ImageNet包含超过1500 0000张的已标记的高清晰度图片,这些图片大约有22000类。这些图片是从网上收集来的,人们使用亚马逊的Mechanical Turk众包工具进行标记。

ImageNet Large-Scale Visual Recognition Challenge(ILSVRC)从2010年开始,每年举行一次,是Pascal Visual Object Challenge的一部分。ILSVRC使用的只是ImageNet的一部分,1000类,每一类大约1000张,总共有120 0000张训练图片,50000张验证图片,150000张测试图片,这些图片的清晰度是不统一的。其中ILSVRC-2010是唯一一次能够获取测试集标签的。比赛通常报告两种错误,top-1 和 top-5。top-5错误率的意思是说模型预测的最可能的5个标签都不是测试图片的正确标签的比例。

步入正题

1.网络结构:

这篇论文主要做的是图片分类,对于我们人来说,拿到一张图片,我们可以很快地知道这张图片上有什么,比如一只猫,一把椅子。但是对于计算机来说,如何对图片进行分类,这就是一个问题,计算机知道的就是一串0和1这些数字。为了达到这个目的,并且效果还不错,它用的模型结构简称AlexNet

总体说来

AlexNet共有8层,有60M以上的参数量。

前五层为卷积层:convolutional layer

后三层为全连接层:fully connected layer

最后一层是1000-way softmax,目标函数是multinorminal logistic regression.

技术分享图片

这个是从论文中截下来的原图,这个模型是在两块3GB的GPU上训练的(GTX 580 3GB GPU),是受那个3GB内存的限制,导致能在一块GTX 580 GPU上训练的模型就有限制,所以模型结构图有上下两部分。从图上我们可以看到第2层,第4层和第5层卷积层的kernels只是和在同一GPU上的前一层kernels相连,而第3层卷积层以及全连接层的kernels则是和之前所有的kernels相连。

分层结构:

 

技术分享图片

 


  • 第1层

(1)输入图片为224 x 224 x 3,表示长宽是224个像素,使用RGB彩色图通道(通道数是3)来表示,所以还要乘以3(学界普遍认为论文中说的224不太合适,讲道理应该是227才对)

(2)使用了96个大小为11 x 11 x 3的filter。在stride为4的设置下,对输入图像进行了卷积操作,得到了 55 x 55 x 96的data map。这三个数字的由来:(227 - 96 )/ 4 + 1 = 55,96就是滤波器的个数。

(3)经过激活函数ReLu,再进行池化操作-maxpooling,滤波器(filter)大小为3 x 3,步长(stride)为2,池化后的输出为27 x 27 x 96。(55 - 3 )/ 2 + 1 = 27. 96 仍为原来的深度。

(4)


  • LRN(Local Response Normalization,局部响应归一化)

 


  • 其他4层卷积层过程与之类似

 


  • 第6层

本层的输入为6 x 6 x 256(9216),,全连接层其实就是一个矩阵运算,它完成一个空间上的映射。所以把输入看成一个列向量X(维度为9216),也就是你可以把输入看成一个9216 x 1 的矩阵。然后和参数矩阵W相乘,这里参数矩阵W设置为4096 x 9216,最后全连接层的输出就是 W与X相乘所得,记为Y(维度为4096 x 1)。

 


  • 第8层

第8层的输出就是1000 x 1的矩阵,即维度为1000的一个列向量,对应softmax regression的1000个标签。

 

2.网络结构的创新点


  • ReLu(RectifiedLinear Uints,修正线性单元)

f(x)=max(0,x),是一种非饱和非线性激活函数。相较于f(x)=tanh(x)和sigmoid函数:f(x)=(1+e^-x)^-1,这两种饱和非线性激活函数而言,SGD梯度下降的时间更快。

多余的话:


  • 多GPU训练

使用并行机制,将kernels分半放在2块GPU上。这里使用了一个小技巧,GPU之间的通讯只在某些层中进行。例如,第3层的核需要从第2层中所有核映射输入。然而,第4层的核只需要从第3层中位于同一GPU的那些核映射输入。


  • LRN(Local Response Normalization,局部响应归一化)

本质上,这个层也是为了防止激活函数的饱和的。

根据这篇博客上(http://blog.csdn.net/cyh_24/article/details/51440344 )作者的理解:通过正则化让激活函数的输入靠近“碗”的中间(避免饱和),从而获得比较大的导数值。从功能上说,跟ReLU是重复的。

作者在论文中提到这么做可以提高网络的泛化能力。

LRN具体说来就是通过这个函数把第i个kernel位于(x,y)处的激励值技术分享图片进行归一化,N是那一层kernels的总数,超参数技术分享图片是常量。

技术分享图片


  • 重叠池化

一个池化层可以看做是由间隔s个像素的池化单元网格组成,每个网格对一个以池化单元为中心的z x z大小的邻域进行总结。

如果s = z,就是传统的局部池化;如果s

这篇论文在整个网络中,都设置s = 2 ,z = 3。同非重叠池化机制(s = 2, z = 2)相比,这个机制分别使得top-1 和 top-5 错误率减少了 0.4% 和 0.3%。

非重叠池化与重叠池化的输出都是相同的维度。而且使用重叠池化的模型在训练中更不容易过拟合。

3.避免过拟合


  •  data augmentation(数据扩充)

有一种观点认为神经网络是通过大量的数据训练出来的,如果增加训练数据,就能够提升算法的准确率,因为这样可以避免过拟合,而避免了过拟合就可以增大网络结构。当数据有限时,就可以通过一些变化从已有数据中生成一些新的数据,来扩大训练数据的size。

其中,最简单通用的图像数据变形的方式如下:

1.从原始图像(256,256)中随机crop出一些图像(224,224)【平移变换,crop】

2.水平翻转图像【反射变换,flip】

3.给图像增加一些随机的光照【光照、色彩变换,color jittering】

AlexNet对data augmentation的处理:

1.平移变换和反射变换:训练时,对于256 x 256的图片随机crop到224 x 224,然后允许水平翻转,相当于将样本倍增到((256 - 224)** 2)* 2 )= 2048。测试时,对左上、右上、左下、右下、中间做了5次crop,然后翻转(flip),共10个crop,之后对结果求平均。

2.改变训练图像RGB通道的强度:我们在遍及整个ImageNet训练集的RGB像素值集合中执行PCA。对于每个训练图像,我们成倍增加已有主成分,比例大小为对应特征值乘以一个从均值为0,标准差为0.1的高斯分布中提取的随机变量。这样一来,对于每个RGB图像像素技术分享图片其中技术分享图片技术分享图片分别是RGB像素值的3×3协方差矩阵的第i个特征向量与特征值,技术分享图片是前面提到的随机变量。每个对于特定训练图像的全部像素只提取一次,直到那个图像再次被用于训练,在那时它被重新提取。这个方案大致抓住了自然图像的一个重要属性,即,光照强度与颜色是变化的,而对象识别是不变的。


  • dropout

它做的就是以0.5的概率将每个隐层神经元的输出设置为零以这种方式”dropped out”的神经元既不参与前向传播,也不参与反向传播。所以每次提出一个输入,该神经网络就尝试一个不同的结构,但是所有这些结构之间共享权重。因为神经元不能依赖于其他特定神经元而存在,所以这种技术降低了神经元复杂的互适应关系。正因如此,要被迫学习更为鲁棒的特征,这些特征在结合其他神经元的一些不同随机子集时有用。前两个全连接层使用dropout。如果没有dropout,我们的网络会表现出大量的过拟合。dropout使收敛所需的迭代次数大致增加了一倍。

4.图片预处理

①大小归一化

将所有图片都归一化为256x256大小,至于为什么直接不归一化到224(227),请参考上文说的扩充数据集的操作。

②减去像素平均值

所有图片每个像素值都减去所有训练集图片平均值

 

参考博客:

1.http://blog.csdn.net/teeyohuang/article/details/75069166

2.http://blog.csdn.net/cyh_24/article/details/51440344

 


推荐阅读
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • importjava.io.*;importjava.util.*;publicclass五子棋游戏{staticintm1;staticintn1;staticfinalintS ... [详细]
  • 在处理大数据量的SQL分页查询时,通常需要执行两次查询来分别获取数据和总记录数。本文介绍了一种优化方法,通过单次查询同时返回分页数据和总记录数,从而提高查询效率。 ... [详细]
  • 本文详细探讨了BCTF竞赛中窃密木马题目的解题策略,重点分析了该题目在漏洞挖掘与利用方面的技巧。 ... [详细]
  • SQL Server 存储过程实践任务(第二部分)
    本文档详细介绍了三个SQL Server存储过程的创建与使用方法,包括统计特定类型客房的入住人数、根据房间号查询客房详情以及删除特定类型的客房记录。 ... [详细]
  • 本文探讨了程序员这一职业的本质,认为他们是专注于问题解决的专业人士。文章深入分析了他们的日常工作状态、个人品质以及面对挑战时的态度,强调了编程不仅是一项技术活动,更是个人成长和精神修炼的过程。 ... [详细]
  • 在日常生活中,支付宝已成为不可或缺的支付工具之一。本文将详细介绍如何通过支付宝实现免费提现,帮助用户更好地管理个人财务,避免不必要的手续费支出。 ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • 本文介绍了如何通过C#语言调用动态链接库(DLL)中的函数来实现IC卡的基本操作,包括初始化设备、设置密码模式、获取设备状态等,并详细展示了将TextBox中的数据写入IC卡的具体实现方法。 ... [详细]
  • 本文通过一个具体的实例,介绍如何利用TensorFlow框架来计算神经网络模型在多分类任务中的Top-K准确率。代码中包含了随机种子设置、模拟预测结果生成、真实标签生成以及准确率计算等步骤。 ... [详细]
  • 嵌套列表的扁平化处理
    本文介绍了一种方法,用于遍历嵌套列表中的每个元素。如果元素是整数,则将其添加到结果数组中;如果元素是一个列表,则递归地遍历这个列表。此方法特别适用于处理复杂数据结构中的嵌套列表。 ... [详细]
  • 在编程实践中,正确管理和释放资源是非常重要的。本文将探讨 Python 中的 'with' 关键字及其背后的上下文管理器机制,以及它们如何帮助我们更安全、高效地管理资源。 ... [详细]
  • 材料光学属性集
    材料光学属性集概述了材料在不同光谱下的光学行为,包括可见光透射率、太阳光透射率等关键参数。 ... [详细]
author-avatar
一粒小小无名砂_741
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有