卷积神经网络(二)-AlexNet

news2024/11/15 1:40:11

前言:

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.coloradmin.cn/o/1947662.html

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

相关文章

科技快讯丨智驱未来,校企共融:浪潮海岳携手山东大学软件学院开展低代码开发实训活动

近日,山东大学软件学院暑期实训活动圆满落幕。作为领先的企业数字化转型优秀服务商,浪潮海岳主导的低代码开发课题吸引了众多师生参训,取得了良好成效。 当前,低代码开发已成为软件行业降本增效、提升用户体验的必然选择&#xff…

labview实现两台电脑共享变量传输及同步

因为工作需要,需要实现多台主机间进行数据传输, 有两个备选方案, 1:建立tcp,然后自己解包 2:就是通过共享变量传输 虽然共享变量也是建立在TCP/IP上面的,但是不用自己解包呀 关于共享变量网络上…

vivo手机恢复出厂设置在哪里?清除数据后如何找回?2个技巧

随着使用时间的增长,手机可能会因为累积的缓存文件、不必要的数据或软件问题而出现性能下降或系统运行缓慢。为了解决这些问题,执行恢复出厂设置成为了一种流行的解决方案。那么,vivo手机恢复出厂设置在哪里?数据清除后该如何找回…

CCRC-DSO数据安全官:打造数据“冷链”,做强做大数据产业

在7月22日国新办举办的“推动高质量发展”系列新闻发布会上,国家数据局局长刘烈宏宣布,为响应党的二十届三中全会的决策,将加速推进数字经济发展机制的构建和完善数据要素市场制度。 他强调了对地方试点探索的支持,目标是建立强大…

基础复习(数组)

数组 一维数组 1.静态初始化 数据类型[] 数组名 new 数据类型[]{元素1,元素2,元素3,...}; 数据类型[] 数组名 {元素1,元素2,元素3...}; 2.动态初始化 数组存储的元素的数据类型[] 数组名字 new 数组存储的元素的数据类型[长度]; 3.执行原理 变量存储的是数组的地址值。…

Pyqt5新手教程

PyQt界面开发的两种方式:可视化UI 编程式UI (1)可视化UI:基于Qt Designer可视化编辑工具进行组件拖放、属性设置、布局管理等操作创建界面。 一是将其保存为.ui文件,然后在PyQt应用程序中加载和使用.ui文件。 二是使用…

接口自动化测试框架实战-3-文件读写封装

上一小节我们详细介绍了项目中所使用的接口文档,本小节我们将进入到接口测试框架第一个部分通用函数commons的开发,本小节我们重点完成文件读写方法的封装。 首先为什么要封装文件读写的方法,原因有如下几点: 读接口配置&#x…

B站音视频分开 大小问题

音频是33331 kb,视频是374661 kb 合并之后却是2561363 kb 这可能是B站音频和视频分开的原因吧

html实现酷炫美观的可视化大屏(十种风格示例,附源码)

文章目录 完整效果演示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 …

深入指南:VitePress 如何自定义样式

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

边缘计算网关项目(含上报进程、32Modbus采集进程、设备搜索响应进程源码)

目录 边缘层 架构说明 包含知识点 数据上报进程 功能描述 功能开发 上报线程 数据存储线程 指令处理线程 项目源码 上报模块.c代码: 上报模块Makefile代码: STM32采集模块.c代码 设备搜索响应模块Linux部分.c代码 设备搜索响应模块Qt端代码.h …

计算机毕业设计-程序论文-高校智能排课系统

本系统开发采用技术为JSP、Bootstrap、Ajax、SSM、Java、Tomcat、Maven 此文章为本人亲自指导加编写,禁止任何人抄袭以及各类盈利性传播, 相关的代码部署论文ppt代码讲解答辩指导文件都有可私要 项目源码,请关注❥点赞收藏并私信博主&#xf…

UML通信图建模技术及应用例

新书速览|《UML 2.5基础、建模与设计实践》 在对系统的动态行为进行建模时,通信图常被用于按组织结构对控制流进行建模。与顺序图一样,一个单独的通信图只能显示一个控制流。 使用通信图建模时可以遵循如下策略: (1&#xff09…

操作系统杂项(九)

目录 一、简述sleep和wait的区别 1、sleep 2、wait 3、区别 二、简述线程池的设计思路,线程池中线程数量的决定因素 1、设计思路 2、线程池中线程数量 三、进程和线程相比,为何更慢 四、简述Linux零拷贝的原理 1、概念 2、优点 3、原理 五、…

MySQL第一阶段:多表查询、事务

继续我的MySQL之旅,继续上篇的DDL、DML、DQL、以及一些约束,该到了多表查询和事务的学习总结,以及相关的案例实现,为未来的复习以及深入的理解做好知识储备。 目录 多表查询 连接查询 内连接 外连接 子查询 事务 事务简介…

加油卡APP系统开发,线上发展优势分析

在当下社会中,汽车加油已经必不可少了,不管有什么出行计划,都需要提前给汽车加油或者中途加油。随着技术的发展,加油卡APP受到了有车一族的欢迎,大众可以在手机上给汽车加油,还能够享受诸多的优惠活动&…

python-阶乘和(赛氪OJ)

题目描述 求Sn​1!2!3!4!5!⋯n!的值,其中 𝑛n 是一个数字。输入格式: 输入一个整数 n。输出格式: 输出对应的 Sn​。 样例输入输出样例输入 5样例输出 153数据范围 对于 100% 的数据,保证1≤n≤20。来源/分类&#xff…

如何使用Python和Selenium解决reCAPTCHA

CAPTCHA已成为我们日常在线活动中重要的防御线。无论是登录账户、提交表单还是进行在线支付,CAPTCHA都在幕后保护我们的安全。然而,CAPTCHA有时可能会成为自动化的绊脚石,阻碍自动化测试、数据收集和效率提升。那么,如何以合法合理的方式绕过这些复杂的CAPTCHA挑战呢?在本文中…

导航不是GPS吗,有人用北斗吗?

在现代生活中,提到导航,人们脑海中最先浮现的往往是GPS。然而,近年来,中国自主研发的北斗导航系统(BeiDou Navigation Satellite System, BDS)正在迅速崛起,逐步占据全球导航市场的一席之地&…

2023年全国赛C题《 电容电感测量装置》设计报告

测量原理 参考下面网站的方案 bookmark 参考LCR测试仪,基本工作原理为给DUT加上正弦激励信号,然后测得该DUT两端的电压和流过DUT的电流,即可通过计算得到DUT的性质和参数。 对于一个理想电容,电流相位应该超前电容两端电压90。…