卷积神经网络(二)-AlexNet

前言:

AlexNet是2012年ImageNet竞赛冠军(以领先第二名10%的准确率夺得冠军)获得者Hinton和他的学生Alex Krizhevsky设计的,在ILSVRC-2010测试集上取得了top-1错误率37.5%,top-5错误率17.0%(优于第二名的16.4%),明显优于之前的方法,证明了深度卷积神经网络在图像识别任务上的强大能力,后续各种优秀的更深的神经网络被提出。

论文:

https://proceedings.neurips.cc/paper_files/paper/2012/file/c399862d3b9d6b76c8436e924a68c45b-Paper.pdf

论文翻译文档:

https://download.csdn.net/download/p731heminyang/89551903

跟Lenet距离约10年,在CNN的基础上面碰到了一些问题,比如说CNN的过拟合(就是训练的数据精度特高,真实数据精度差)、激活函数的效率问题以往的tanhsigmoid、GPU内存太小无法训练、以前池化都采用平均池化造成特征采集模糊化、数据量太小等。

AlexNet解析

今天我们来看看AlexNet,首先就是网络图

我们来分析下网络图,整个网络图共分为8层,这里的架构用了双GPU架构,所以采用了两层架构,主要是受限于当前的硬件限制,当个GPU的显存有限(当时使用的GTX 580 GPU只有3GB的内存),在训练的时候没有显示不够用,所以用双GPU的方式替代,所以相应的结构也需要调整,调整为上下两层,现在GPU能力足够不需要通过这种上下层的方式了。

这里采用的是RGB三色

第一层(卷积层)C1:

输入大小:3x224x224  ,相比与LeNet这里采用的彩色图RGB,所以是3,为啥是224了,论文里面也介绍了,它采用数据增强,是从256x256图片里面 随机选取或者反转224x224的图片去做训练,这样数据量大,但是也会容易过拟合,这里采用了其他的方式防止。

卷积核:96个11x11x3的卷积核,卷积核的步长是4;这是个三维卷积核对应的图片的RGB,96个卷积核分为两部分对应两个GPU,每一组GPU对应一个48个11x11x3的卷积核。

输出大小:96x55x55,通过公式得出W=(224-11)/4 +1   得出目标的长宽54.5  ,一般为了尽可能保留特征选择向上取整,输出为55,由于卷积核为96个,所以输出的图形也有96个,只不过由于双GPU原因分为了两组分别为48个55x55的图。

参数大小:34,944个,学习参数,需要存储的,共96组wx+b ,其中w为3x11x11 ,b就是常数,所以为1,96x(3x11x11+1)=34944

激活函数:ReLU

通过卷积核把整张图3x224x224分别过滤到两个GPU上面,每个GPU包含48张55x55的图,为后面的双GPU进行执行,当然现在已经没有这么采用了,基本GPU的显存也比较大,而且GPU的算力也比之前大多了。

第二层(池化层)P1:

这里是最大池化层,就是在区域内选取最大值

输入大小:96x55x55  ,这里是前面一层的输入,当然这里也分为了两层,两个GPU分别选择前面对应卷积的48x55x55进行池化

滤波器3×3 ,步长为2 最大池化

输出大小:96x27x27 ,按照计算得出(55-3)/2 +1 =27

参数大小:0,池化层一般没有学习参数,有些特殊的池化层也可以系数可以学习,但是标准的没有。

这里选取的池化是最大池化,因为平均池化容易让特征混淆,所以后续的网络里面池化大多都是选取的最大池化层。而且论文提出了一个观点就是重叠池,就是步长需要小于滤波器核,这样可以多选取一些重叠的特征进行特征增强会是模型减少过拟合。

第三层(卷积层)C2:

输入参数:96x27x27,上一层输入,相同的GPU池化之后进入卷积,每个GPU都得到48个27x27的图进行计算。

卷积核:256个5x5,步长为1,填充为2,分为两组128个5x5的卷积核当为2个GPU进行运算

输出参数:256x27x27,宽高度计算,通过公式:(27-5+2x2)/1 + 1 =27,通道等于卷积核个数256个。

参数大小:6,656,计算公式256个wx+b,w为5x5  b为1 ,所以256x(5x5+1)=6656

激活函数:ReLU

第四层(池化层)P2:

输入参数:256x27x27,上一层输出,交叉计算到了两个GPU,每组128x27x27。

滤波器:3x3,步长为2。最大池化层

输出参数:256x13x13,宽高度计算,(27-3)/2 + 1= 13

参数大小:0,没有带权重

第五层(卷积层)C3:

输入参数:256x13x13,上一层输出

卷积核:384个3×3x256,步长1,填充1 ,这里做了GPU的交叉计算,这里计算的时候卷积核会把一张图256x13x13进行覆盖,所以卷积核通道是256

输出参数:384x13x13,宽高计算,(13-3+1x2)/1+1= 13,宽高没有变化

参数大小:885,120,公式:384x(3x3x256+1)=885120

激活函数:ReLU

第六层(卷积层)C4:

输入参数:384x13x13,上一层输出

卷积核:384个3×3×192,步长1,填充1 ,这里没有对整张图进行交叉计算了,分开两个GPU得出的数据192x13x13来进行计算了

输出参数:384x13x13,宽高计算,(13-3+1x2)/1+1= 13,宽高没有变化

参数大小:663,936,公式:384x(3x3x192+1)=663936

激活函数:ReLU

第七层(卷积层)C5:

输入参数:384x13x13,上一层输出

卷积核:256个3×3×192,步长1,填充1

输出参数:256x13x13,宽高计算,(13-3+1x2)/1+1= 13,宽高没有变化

参数大小:442,624,公式:256x(3x3x192+1)=442624

激活函数:ReLU

第八层(池化层)P3:

输入参数:256x13x13,上一层输出

滤波器:3x3,步长为2。最大池化层

输出参数:256x6x6,宽高度计算,(13-3)/2 + 1= 6

参数大小:0,没有带权重

第九层(全连接层)F1:

输入参数:256x6x6

输出参数:4096 ,正常的全连接是不可能得到4096的,而是得到256x6x6=9216的,这里全连接层自己做了特殊处理,某些参数进行合并了才得到4096,非标准全连接。

参数大小:37,605,376, 计算,4096个wx+b,w为256x6x6,4096x(255x6x6+1)=37605376

注意后面跟着Dropout,在轮文中提到了在两个全连接层中包含Dropout,但是图上没有写,这里就

第十层(Dropout)D1:

输入参数:4096

丢弃率:0.5  随机失活50%的节点,就是把输出置为0

输出参数:4096

参数个数:0

Dropout在训练中体现,推理中不起作用,这里图也没有显示,主要用于随机失活一些数据,就是把一些输出数据赋值为0,这样的话可以起到防止过拟合,提高泛化率。

第十一层(全连接层)F2:

多几层全连接层进行特征整合,方便后续的分类。

输入参数:4096

输出参数:4096

参数大小:16,781,312, 参数为4096个wx+b ,w为4096,那么为4096x(4096+1) =16781312

第十二层(Dropout)D2:

输入参数:4096

丢弃率:0.5  随机失活50%的节点,就是把输出置为0

输出参数:4096

参数个数:0

第十三层(全连接层)F3:

最后一层,进行分类处理,这里显示类型的概率

输入参数:4096

输出参数:1000

参数大小:4,097,000,1000个wx+b,w为4096,那么为1000x(4096+1)=4097000

激活参数:Softmax  此激活函数是为了分类使用,进行归一化,把所有数据化为0~1之间的小数,所有数的累加和为1,这样排序下选择得分最高的就是哪个对象了,把1000进行类别分类,这个在训练的时候标记数据需要准备。

比如1 动物牛 2是动物羊 ... 1000 动物老虎 ,如果下标2 为0.99 分数最高,那么就能够得出这张图片对象为动物羊了。

总结:

  AlexNet 针对之前的CNN做出来改进,把网络模型增加了(之前训练的5层到8层),并且带权重的网络增加到了8层,识别种类可以达到1000种,在当时是非常不错了,参数60,516,968个(大约6000w个权重参数,和论文里面的60million对上了)。里面包含的可训练的网络层只有8层(C1、C2、C3、C4、C5、F1、F2、F3)相当于现在的网络层级来说层数太浅了无法支持更复杂的特征。

    AlexNet提出的改进点有:

  1.         重叠池:提出步长小于滤波器的边数,这样获取值的时候能够对有效特征进行重复提取,可以提高识别精度。例子:比如滤波器为5x5,那么步长为1~4,就会形成重叠池了,就是重复采集;而且这里使用了最大池化作为有效特征,避免之前的平均池化带来的模糊化特征的情况,后续神经网络基本也是采取的最大池化。
  2.         ReLU:函数(𝑓(𝑥)=max⁡(0,𝑥))把relu激活函数发扬光大了,之前一直使用的是tanhsigmoid,比起他们速率提高了(只取0和最大值)、提高稀疏性(只取大于0的数据,去除其他部分减少依赖)、避免了梯度消失问题(在正数区域,梯度恒为1)
  3.         Dropout:引入Dropout随机失活一部分神经网络的值,避免整个神经网络过拟合,这里后面的全连接用到了此技术,就是计算之后随机把结果赋值为0。
  4.         GPU加速:引用了GPU加速网络升级的训练和推理,这里由于当时的GPU显存低,还用到了双GPU架构,后续GPU提升显存,后面的框架基本没有采用此种架构了。
  5.         数据增强:受限于之前的数据量大小,这里提出了数据增强的功能,比如从256x256 选取224x224的区域,这里是从四个角和中间选取224x224,并且水平翻转增加数据量,从而减少过拟合的风险。

代码:

        这里由于当前框架都不太兼容双GPU架构,这里不提供代码展示了(学习学习思想)。

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/875799.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【微信小程序实战教程】之微信小程序 WXS 语法详解

WXS语法 WXS是微信小程序的一套脚本语言,其特性包括:模块、变量、注释、运算符、语句、数据类型、基础类库等。在本章我们主要介绍WXS语言的特性与基本用法,以及 WXS 与 JavaScript 之间的不同之处。 1 WXS介绍 在微信小程序中&#xff0c…

LeetCode 637, 67, 399

文章目录 637. 二叉树的层平均值题目链接标签思路代码 67. 二进制求和题目链接标签思路代码 399. 除法求值题目链接标签思路导入value 属性find() 方法union() 方法query() 方法 代码 637. 二叉树的层平均值 题目链接 637. 二叉树的层平均值 标签 树 深度优先搜索 广度优先…

四、GD32 MCU 常见外设介绍(9)9.FWDG 模块介绍

9.1.FWDG 简介 本章我们主要分析独立看门狗(FWDG)的功能框图和它的应用。独立看门狗用通俗一点的话来解释就是一个12位的递减计数器,当计数器的值从某个值一直减到0的时候,系统就会产生一个复位信号,即FWDGTRSTF。如果…

基于深度学习算法,支持再学习功能,不断提升系统精准度的智慧地产开源了。

智慧地产视觉监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。通过计算机视觉和…

Java基础巩固——JDK 8、9新增接口的特性(接口中定义非抽象方法、静态方法和私有方法)

#Java学了这么久,项目也做了?基础知识还不巩固?快来关注我的这篇系列博客——Java基础复习巩固吧# 目录 引言 一、JDK8新特性:允许在接口中定义非抽象方法和静态方法。 注意事项 二、JDK9新特性:允许在接口中定义p…

ScriptableObject使用

资料 Scripting/Create modular game architecture in Unity with ScriptableObjects 脚本文档 基础 SO是一个Unity对象,继承UnityEngine.Objec, SO最大的特点是实例文件可共享,有点类似静态数据,同一个实例文件可被多个对象引…

matlab实验:实验六MATLAB 数值计算与符号运算

题目1:(线性方程组数值求解) 1. 用不同的方法求解下面方程:(方程原式参考 P369 实验 10,第 1 题) 第 1 种,左除和求逆函数(inv) 第 2 种 , 用 符 号 运 算 的…

JAVA基础知识4(static、继承)

JAVA基础知识4 static静态成员变量静态成员方法解释注意点 继承父类(基类或超类)子类(派生类)使用继承的示例解释运行结果 成员变量的访问特点成员方法的访问特点构造方法的访问特点 Java项目,包和类之间的联系包的概念…

vue elementui 在table里使用el-switch

<el-table-columnprop"operationStatus"label"状态"header-align"center"align"center"><template slot-scope"scope"><el-switch active-value"ENABLE" inactive-value"DISABLE" v-mod…

【C语言】两个数组比较详解

目录 C语言中两个数组比较详解1. 逐元素比较1.1 示例代码1.2 输出结果1.3 分析 2. 内置函数的使用2.1 示例代码2.2 输出结果2.3 分析 3. 在嵌入式系统中的应用3.1 示例代码3.2 输出结果3.3 分析 4. 拓展技巧4.1 使用指针优化比较4.2 输出结果4.3 分析 5. 表格总结6. 结论7. 结束…

Python写UI自动化--playwright(通过UI文本匹配实现定位)

本篇简单拓展一下元素定位技巧&#xff0c;通过UI界面的文本去实现定位 目录 匹配XPath 匹配文本元素 .count()统计匹配数量 处理匹配文本返回多个元素 1、使用.nth(index)选择特定元素: 2、获取所有匹配的元素并遍历: 3、错误处理: 匹配XPath 比如我们要定位到下图的…

C++笔试强训8

文章目录 一、选择题1-5题6-10题 二、编程题题目一题目二 一、选择题 1-5题 根据下面的定义故选A。 函数重载:在相同作用域中&#xff0c;函数名字相同&#xff0c;参数列表不同的一系列函数称为函数重载参数列表不同具体的体现:参数个数不同参数类型不同类型的次序不同注意:…

单元测试--Junit

Junit是Java的单元测试框架提供了一些注解方便我们进行单元测试 1. 常用注解 常用注解&#xff1a; TestBeforeAll&#xff0c;AfterAllBeforeEach&#xff0c;AfterEach 使用这些注解需要先引入依赖&#xff1a; <dependency><groupId>org.junit.jupiter<…

6 C 语言指针的奥秘:理论与实践详解

目录 1 变量访问机制 1.1 内存地址 1.2 变量的直接访问 1.3 变量的间接访问 2 指针变量及其内存大小 2.1 指针与指针变量 2.2 指针变量的定义格式 2.3 指针变量的内存大小 3 取地址操作符与取值操作符 3.1 取地址操作符 & 3.2 取值操作符 * 3.3 解引用与数据类…

【数据结构】顺序表(杨辉三角、简单的洗牌算法)

&#x1f387;&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了 博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳&#xff0c;欢迎大佬指点&#xff01; 欢迎志同道合的朋友一起加油喔 &#x1f4aa;&#x1f4aa;&#x1f4aa; 谢谢你这么帅…

学习React(描述 UI)

React 是一个用于构建用户界面&#xff08;UI&#xff09;的 JavaScript 库&#xff0c;用户界面由按钮、文本和图像等小单元内容构建而成。React 帮助你把它们组合成可重用、可嵌套的 组件。从 web 端网站到移动端应用&#xff0c;屏幕上的所有内容都可以被分解成组件。在本章…

优化医疗数据管理:Kettle ETL 数据采集方案详解

在现代医疗保健领域&#xff0c;数据的准确性、完整性和及时性对于提高医疗服务质量和患者护理至关重要。为了有效管理和利用医疗数据&#xff0c;Kettle ETL&#xff08;Extract, Transform, Load&#xff09;数据采集方案成为了许多医疗机构的首选工具之一。本文将深入探讨Ke…

【基础算法总结】队列 + 宽搜(BFS)

队列 宽搜BFS 1.N 叉树的层序遍历2.二叉树的锯齿形层序遍历3.二叉树最大宽度4.在每个树行中找最大值 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#…

MySQL作业五

1. 创建表goods&#xff0c;orders 2. 向商品表中插入商品记录 3. 触发器操作 3.1 建立触发器&#xff0c;订单表中增加订单数量后&#xff0c;商品表商品数量同步减少对应的商品订单出数量,并测试 3.2 建立触发器&#xff0c;实现功能:客户取消订单&#xff0c;恢复商品表对应…