卷积神经网络(二)-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. 二叉树的层平均值 标签 树 深度优先搜索 广度优先…

prompt面试三道题

关于“prompt”(在AI、自然语言处理或用户交互等领域中,通常指的是引导用户输入或系统响应的文本或指令)的面试题,可以从不同角度和难度级别来设计。以下是由简单到困难的三道面试题: 1. 简单题 题目:请解…

【面试题】:MySQL `EXPLAIN`执行计划字段解析

MySQL EXPLAIN执行计划字段解析 引言 在MySQL中,EXPLAIN是一个强大的工具,用于分析查询语句的执行计划。通过EXPLAIN,你可以了解MySQL如何执行你的查询,包括它如何连接表、使用索引以及表的访问顺序等。了解这些信息对于优化查询…

四、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…

使用框架构建React Native应用程序的最佳实践

在React Conf上&#xff0c;我们更新了关于开始构建React Native应用程序的最佳工具的指导&#xff1a;一个React Native框架——一个包含所有必要API的工具箱&#xff0c;让您能够构建生产就绪的应用程序。 现在推荐使用React Native框架&#xff08;如Expo&#xff09;来创建…

Spring 依赖注入02

文章目录 1. 核心概念2. 依赖注入的方式3. 构造函数注入3.1 构造函数注入的优点包括&#xff1a; 4. 设值注入4.1 设值注入的特点和优点4.2 使用设值注入的注意事项 5. 接口注入5.1 接口注入的基本概念&#xff1a;5.2 使用接口注入的注意事项&#xff1a; 依赖注入&#xff08…

代码随想录day23 ||39组合总和1 40组合总和2 131分割回文串

39组合总和1 力扣题目链接 题目描述&#xff1a; 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 cand…

【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. 结束…

高级及架构师高频应用型面试题

一、微服务多节点批量应该怎么设计&#xff1f; 1、异步任务分类&#xff1a; 周期性定时任务调度任务批量任务 2、需要考虑并解决的问题&#xff1a; 2.1、避免同一任务同时被多个节点捞取。 1&#xff09;数据库的行级锁 2&#xff09;redis分布式锁 3&#xff09;quartz…

后端面试题日常练-day06 【Java基础】

题目 希望这些选择题能够帮助您进行后端面试的准备&#xff0c;答案在文末 在Java中&#xff0c;以下哪个关键字用于表示类之间的关联性&#xff0c;表明一个类包含另一个类的对象&#xff1f; a) include b) contain c) reference d) composition Java中的方法重写&#xff…

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;参数列表不同的一系列函数称为函数重载参数列表不同具体的体现:参数个数不同参数类型不同类型的次序不同注意:…