神经网络-AlexNet

AlexNet是在2012年的ImageNet竞赛后,整理发表的文章,也是对CNN网络的衍生。

网络结构

AlexNet网络结构如下图所示,网络分为了上下两部分,对应两个不同的GPU训练,可以更好的利用GPU算力。只有在特殊的网络层后,两个网络层才进行交互,上下网络之间网络结构差异不是很大。网络总共有8层,分别是5层卷积、3层全连接。

论文中虽然显示图线是224*224*3,但按照后面的数据推算,应该输入的227*227*3的图像,可能是当时写错了?下面以227为例进行说明。

网络亮点

  • 数据增强(data augmentation)

为了防止在有限的数据集与较深的网络结构下,网络仍有一个较好的结果,避免过拟合。论文中采用了两种数据增强的方式,

第一种:对图片镜像反射并裁剪。将原本256*256的图像镜像反射,这样训练集翻倍;针对原始图像和镜像图像,在左上、右上、左下、右下、中间分别做了5次裁剪,裁剪大小为224*224;这样一张图片经过了1变2,2变10的增加,完成的数据量级的增加。

第二种方式:对图像中RGB数据做PCA处理,对主成分做标准差为0.1的高斯扰动,增加数据噪声。通过PCA的色彩增强方法,使得图片的明亮程度会发生变化,但并没有改变图片的结构。具体过程如下:

  1. 一张图片为224*224*3,我们对其做一个变换,将其变成224*224行,3列的大矩阵。

  2. 对上面的矩阵进行主成分分析,获取排名top3的特征向量p和对应的特征值λ。

  3. 创建一个随机变量α,使其满足均值为0,方差1的高斯分布。

  4. 通过下面公式,对图片中的像素点进行重新赋值。

该方法在每训练一次之后,就会重新进行一次计算,产生的图片也像在强光或弱光下的照片,最终使得在top1错误率减少了1%以上。

  • 激活函数

在神经网络中,常用的激活函数有tanh()和sigmoid()函数,这些饱和的非线性函数相对于非饱和的非线性函数max()等函数要慢很多,因此最终使用了ReLU作为激活函数,同时一定程度上解决了sigmoid函数带来的梯度弥散问题。

在使用ReLU的四层卷积网络,在CIFAR-10训练集中error rate降到25%的时候,比tanh快了六倍。

什么是饱和性?

简单来说,饱和性(saturating)是指,对于输入,函数的输出可以将其限定在一个范围内,即其输出有最大值和最小值,例如我们常见的sigmoid()->[0,1],输出在0~1之间。

非饱和性,即输入的数值,在通过函数之后没有被限定在一个范围,即我们常见的ReLU()函数。从论文中的实验结果看,也验证了非饱和性的速度更快一些。

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

局部归一化,简称LRN,可以带来泛化性能的提升,公式如下:

如下图是一组feature map,其中黄色像素点的位置为ax,y,计算相邻feature map相同位置的像素值,取平方,然后乘以α,加上k,做β次运算。论文中采用了k=2,n=5,α=0.0001,β=0.75。

具体来说,我们将k称作偏移量,α称作缩放比例系数,β称作超参数(影响归一化)。论文中在使用局部归一化后,top1的错误率降低了1.4%,top5的错误率降低了1.2%。

  • overlapping pooling(覆盖化的池化)

传统的CNN网络中池化核之间并不会重叠,本网络中使用池化层大小为3*3,stride为2,这样池化核之间就会有重叠,在top1和top5的实验中,错误率分别降低了0.4%和0.3%,在训练过程中也更加不易过拟合。

传统CNN中池化层一般会采用平均池化,AlexNet使用了最大池化,避免了平均池化带来的模糊化效果,覆盖化的池化,一定程度上提升了特征的丰富性。

  • Dropout

在全连接层中,使用了Dropout关闭一些网络中的神经节点,起到防止过拟合的作用。这些被关闭的神经元不再参与前向传播和反向传播。

因此在每次数据输入时,网络的结构(神经元)都会有所不同,但学习的权重一直都是在共享的状态。这种方式,是的神经元不是依赖单个或某些神经元完成训练,而是能有更大范围的鲁棒性,因此很大程度上避免了过拟合。

  • GPU计算

网络使用了两个GPU进行训练,减少了原有网络的训练时间,网络一共8层,其中绿色部分是上下两个GPU发生信息交互的位置。

  • 权重动态调整

对于权重的动态调整,采用了如下公式,使得模型的训练误差得到了降低。

应用

  • 定义模型结构 

import torch.nn as nn
import torchclass AlexNet(nn.Module):def __init__(self, num_classes=1000, init_weights=False):super(AlexNet, self).__init__()self.features = nn.Sequential(# 卷积层1nn.Conv2d(3, 48, kernel_size=11, stride=4, padding=2),  nn.ReLU(inplace=True),  # inplace=True 增加计算量,降低了内存消耗nn.MaxPool2d(kernel_size=3, stride=2),  # 卷积层2nn.Conv2d(48, 128, kernel_size=5, padding=2),           nn.ReLU(inplace=True),nn.MaxPool2d(kernel_size=3, stride=2),  # 卷积层3nn.Conv2d(128, 192, kernel_size=3, padding=1),          nn.ReLU(inplace=True),# 卷积层4nn.Conv2d(192, 192, kernel_size=3, padding=1),          nn.ReLU(inplace=True),# 卷积层5nn.Conv2d(192, 128, kernel_size=3, padding=1),          nn.ReLU(inplace=True),nn.MaxPool2d(kernel_size=3, stride=2))self.classifier = nn.Sequential(# 全连接层6nn.Dropout(p=0.5),nn.Linear(128 * 6 * 6, 2048),nn.ReLU(inplace=True),# 全连接层7nn.Dropout(p=0.5),nn.Linear(2048, 2048),nn.ReLU(inplace=True),# 全连接层8nn.Linear(2048, num_classes),)if init_weights:self._initialize_weights()def forward(self, x):x = self.features(x)x = torch.flatten(x, start_dim=1)x = self.classifier(x)return xdef _initialize_weights(self):# 遍历所有网络层结构for m in self.modules():# 如果属于卷积层,使用如下方法初始化if isinstance(m, nn.Conv2d):nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu')if m.bias is not None:nn.init.constant_(m.bias, 0)# 如果是全连接层,使用如下方法初始化elif isinstance(m, nn.Linear):nn.init.normal_(m.weight, 0, 0.01)nn.init.constant_(m.bias, 0)

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

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

相关文章

【R语言遥感技术】“R+遥感”的水环境综合评价方法

R语言在遥感领域中是一个强大的工具,它提供了一系列的功能和优势,使得遥感数据的分析和应用更加高效和灵活。以下是R语言在遥感中的具体应用: 数据处理:R语言可以处理和清洗遥感数据,包括数据转换、滤波处理、去噪和数…

硬件模块常使用的外部中断

对于STM32来说,想要获取的信号是外部驱动的很快的突发信号 例1:旋转编码器的输出信号: 可能很久都不会拧它,不需要STM32做任何事情但是一拧它,就会有很多脉冲波形需要STM32接收信号是突发的,STM32不知道什…

TCN-Transformer+LSTM多变量回归预测(Matlab)添加气泡图、散点密度图

TCN-TransformerLSTM多变量回归预测(Matlab)添加气泡图、散点密度图 目录 TCN-TransformerLSTM多变量回归预测(Matlab)添加气泡图、散点密度图预测效果基本介绍程序设计参考资料 预测效果 基本介绍 基本介绍 1.双路创新&#xff…

基于AI IDE 打造快速化的游戏LUA脚本的生成系统

前面写了一篇关于使用AI IDE进行C安全开发的博客《使用AI IDE 助力 C 高性能安全开发!》, 得到许多同学们的喜欢,今天我们来继续在游戏开发中扩展一下AI的能力,看看能不能给游戏研发团队一些启发。 在游戏研发中,Lua曾…

windows nacos安装配置

GitHub下载压缩包 解压目录(注意不要用中文路径) 在mysql先创建数据库nacos,再执行sql脚本 配置数据库 #*************** Config Module Related Configurations ***************# ### If use MySQL as datasource: ### Deprecated conf…

Redis 基本全局命令

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 Redis 基本全局命令 收录于专栏[redis] 本专栏旨在分享学习Redis的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 KEYS EXISTS DEL…

qt QZipReader详解

1、概述 QZipReader 是 Qt 中用于从 .zip 文件中读取和提取文件内容的类。它提供了便捷的方法来访问压缩包中的文件和目录,并允许你解压缩单个或多个文件。通过 QZipReader,你可以以编程方式读取 .zip 文件中的内容,并提取它们到目标目录中。…

开发微信小程序的过程与心得

起因 作为家长,我近期参与了学校的护学岗工作。在这个过程中,我发现需要使用水印相机来记录护学活动,但市面上大多数水印相机应用都要求开通会员才能使用完整功能。作为一名程序员,我决定利用自己的技术背景,开发一个…

基于vue-popperjs的二次封装弹窗

前言&#xff1a; 基于vue-popperjs的二次封装代码 <template><!-- 1. :appendToBody"true"是否把位置加到body外层标签上饿了么UI和antD是true&#xff0c;iview和vuetifyjs是false2. trigger属性触发方式&#xff0c;常用hover悬浮触发、clickToOpen鼠标…

OpenAI 普及 ChatGPT,开通热线电话,近屿智能深耕AI培训

12月19日&#xff0c;在OpenAI直播活动的第10天&#xff0c;宣布允许用户通过电话或WhatsApp与ChatGPT进行交互。并在美国推出 ChatGPT 热线电话&#xff0c;用户拨打后可与 ChatGPT 进行语音对话。 这项服务的一个亮点在于它兼容各种类型的通信设备——不论是现代智能手机如iP…

黑马Java面试教程_P9_MySQL

系列博客目录 文章目录 系列博客目录前言1. 优化1.1 MySQL中&#xff0c;如何定位慢查询&#xff1f;面试文稿 1.2 面试官接着问&#xff1a;那这个SQL语句执行很慢,如何分析 ( 如何优化&#xff09;呢?面试文稿 1.3 了解过索引吗?(什么是索引)1.4 继续问 索引的底层数据结构…

Vue3+@antv/g2plot 生成词云图

antv/g2plot 是一个基于 AntV 的图表库属于antv库的一部分 用于快速创建各种类型的图表 支持折线图、柱状图、饼图、散点图等多种图表类型 antv/g2plot 属于antv库的一部分 g2plot是在g2基础上封装的 npm install antv/g2plot --save效果 所有值共享一个颜色并且每次刷新颜色随…

K线单边突破指标(附带源码)

编写需求&#xff1a; 今天我们来根据粉丝要求进行源码复现&#xff1a; 【请根据最近两根K线判断当下的行情做多&#xff0c;做空方向。用三个价格判断当前K线状态&#xff0c;最高价、最低价、收盘价都大于昨日对应价格&#xff0c;为上涨K线。用三个价格判断当前K线状态&a…

LabVIEW电机控制中的主动消抖

在LabVIEW电机控制系统中&#xff0c;抖动现象&#xff08;如控制信号波动或机械振动&#xff09;会影响系统的稳定性和精度。通过使用主动消抖算法&#xff0c;可以有效降低抖动&#xff0c;提高控制性能。本文将介绍几种主流的主动消抖算法&#xff0c;并结合具体应用案例进行…

【安全测试相关知识】

安全测试介绍 背景 在当前信息技术快速发展的背景下&#xff0c;网络安全问题日益严峻&#xff0c;数据泄露、黑客攻击、病毒传播等安全事件层出不穷&#xff0c;给个人、企业乃至国家带来严重威胁。所以安全测试已成为企业和国家关注的重心 作用 安全测试是确保软件系统安…

重温设计模式--工厂模式(简单、工厂、抽象)

文章目录 工厂模式定义工厂模式通常可以细分为以下几种类型1、简单工厂模式&#xff08;Simple Factory Pattern&#xff09;2、工厂方法模式&#xff08;Factory Method Pattern&#xff09;3、抽象工厂模式&#xff08;Abstract Factory Pattern) UML 图1、简单工厂模式UML2、…

SAP PP 后继物料触发条件

问题&#xff1a; 物料主数据 MRP4维护了后继物料&#xff0c;该物料库存为0&#xff0c;但是做生成订单时候&#xff0c;查看BOM没有显示未后续无力啊 原因 需要在生成订单中点击可用性检查&#xff0c;才能出发对库存校验&#xff0c;才能匹配到后继物料

联通光猫怎么自己改桥接模式?

环境&#xff1a; 联通光猫 ZXHN F677V9 硬件版本号 V9.0 软件版本号 V9.0.0P1T3 问题描述&#xff1a; 联通光猫怎么自己改桥接模式 家里用的是ZXHN F677V9 光猫&#xff0c;最近又搞了个软路由&#xff0c;想改桥接模式 解决方案&#xff1a; 1.拿到最新超级密码&…

商场消防电气控制系统设计(论文+源码)

1系统的功能及方案设计 如图2.1所示为本次设计的整体框图&#xff0c;其中单片机部分采用ST89C52来负责协调各个模块&#xff1b;液晶选择LCD1602液晶屏来显示信息;温度传感器选择PT1000进行温度的检测&#xff1b;烟雾传检测选择MQ2烟雾传感器&#xff1b;CO2检测选择CCS811模…