ImageNet classification with deep convolutional neural networks

news2025/1/17 22:11:20

 使用深度卷积神经网络进行ImageNet图像分类

目录

1.引言

2.网络结构

2.1 小细节

 2.2 代码部分

3. 创新点

3.1 非线性激活函数ReLU(提速)

3.2 多GPU训练(提速)

3.3局部响应归一化(增强泛化能力,已不再使用)

3.4重叠池化(轻微防止过拟合/提高准确率,不再使用)

3.5 数据增强(防止过拟合)

3.6 dropout

4.参考


1.引言

    2012年被认为是深度学习复兴之始,当时来自多伦多大学的Hinton(深度学习三巨头之一)和他的学生Alex Krizhevsky提出了一个名叫“AlexNet”的神经网络结构,该结构在当年的ImageNet LSVRC-2012竞赛一举夺冠,并以此开启了深度学习的热潮。

2.网络结构

网络包含8个层:前5层为卷积层,后3层为全连接层,最后一个全连接层的输出被送到一个1000路的softmax分类器。

2.1 小细节

  • 原论文中,AlexNet的输入图像尺寸是224x224x3,但是实际图像尺寸为227x227x3。
  • 因为计算量太大,使用了两台GPU进行训练,并只在确定的层之间交互(注意看卷积核映射虚线:第2、第4和第5个卷积层的内核,仅连接到位于同一GPU上的前一层中的内核映射,第三个卷积层的内核连接到第二层的所有内核映射。)

 (最好跟着流程算一遍)

 2.2 代码部分

#01:定义网络结构:在__init__构造函数中申明各个层的定义,在forward中实现层之间的连接关系
class AlexNet(nn.Module):
    def __init__(self,num_classes):
        super().__init__()
        self.conv1=nn.Sequential(
            nn.Conv2d(in_channels=3, out_channels=96, kernel_size=11, stride=4, padding=0),
            nn.BatchNorm2d(96), #BN加在激活函数前面或后面
            nn.ReLU(inplace=True), #inplace=True将上层网络传递下来的tensor直接进行修改,来节省运算内寸
            nn.MaxPool2d(kernel_size=3, stride=2)
        )
        self.conv2=nn.Sequential(
            nn.Conv2d(in_channels=96, out_channels=256, kernel_size=5, stride=1,padding=2), nn.BatchNorm2d(256),
            nn.BatchNorm2d(256)
            nn.ReLU(inplace=True),
            nn.MaxPool2d(3,2)
        )
        self.conv3=nn.Sequential(
            nn.Conv2d(in_channels=256,out_channels=384,kernel_size=3,stride=1,padding=1),
            nn.BatchNorm2d(384),
            nn.ReLU(inplace=True)
        )
        self.conv4=nn.Sequential(
            nn.Conv2d(in_channels=384,out_channels=384,kernel_size=3,stride=1,padding=1),
            nn.BatchNorm2d(384),
            nn.ReLU(inplace=True)
        )
        self.conv5=nn.Sequential(
            nn.Conv2d(in_channels=384,out_channels=256,kernel_size=3,padding=1),
            nn.BatchNorm2d(256),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(3,2)
        )
        self.fc=nn.Sequential(
            nn.Linear(in_features=9216,out_features=4096),
            nn.ReLU(inplace=True),
            nn.Dropout(0.5),
            nn.Linear(in_features=4096, out_features=4096),
            nn.ReLU(inplace=True),
            nn.Dropout(0.5),
            nn.Linear(in_features=4096, out_features=num_classes),
        )
    def forward(self,x):
        x=self.conv1(x)
        x=self.conv2(x)
        x=self.conv3(x)
        x=self.conv4(x)
        x=self.conv5(x)
        x=x.view(x.size(0),-1) #x=torch.flatten(x,start_dim=1)
        x=self.fc(x)
        return x

3. 创新点

3.1 非线性激活函数ReLU(提速)

ReLU的收敛速度要快于sigmoid与tanh,因为后两者存在饱和区,在饱和区的梯度变化缓慢甚至出现梯度消失

3.2 多GPU训练(提速)

单个GPU的内存限制了网络的训练规模,采用多GPU协同训练,可以大大提高AlexNet的训练速度。

3.3局部响应归一化(增强泛化能力,已不再使用)

  • a_{x,y}^{i}表示第i片特征图在位置(x,y)运用激活函数 ReLU 后的输出。n 是同一位置上临近的 feature map 的数目,N 是特征图的总数。
  • 参数 k,n,α,β 都是超参数。k=2,n=5,α=10-4,β=0.75。
  • k是为了防止分母为0

举一个例子:

i = 10, N = 96 时,第 i=10 个卷积核在位置(x,y)处的取值为 a_{x,y}^{i} ,它的局部响应归一化过程如下:用 a_{x,y}^{i}除以第 8、9、10、11、12 片特征图位置(x,y)处的取值平方求和。

也就是跨通道的一个 Normalization 操作 

      局部响应归一化(local response normalization,LRN)的思想来源于生物学中的“侧抑制”,是某个神经元受到刺激而产生兴奋时,再刺激相近的神经元,则后者所发生的兴奋对前者产生的抑制作用。也就是说,侧抑制是指相邻的感受器之间能够互相抑制的现象。采用LRN的目的是为了将数据分布调整到合理的范围内,便于计算处理,从而提高泛化能力。

3.4重叠池化(轻微防止过拟合/提高准确率,不再使用)

AlexNet 全部使用最大池化的方式,避免了平均池化所带来的模糊化的效果,并且步长 < 池化核的大小,这样一来池化层的输出之间会有重叠和覆盖,提升了特征的丰富性。论文采用参数stride=2,kernelsize=3

此前的 CNN 一直使用平均池化的操作。

3.5 数据增强(防止过拟合)

alexnet中采用两种数据增强的策略

  • 训练时从256x256的原图中随机提取224x224的图片以及水平翻转,数据集扩大了2048倍

2048 = ( 256 - 224 ) * ( 256 - 224 ) * 2

    即一张256x256的图像随机裁剪出224x224的图像有( 256 − 224 ) ∗ ( 256 − 224 ) 种可能,再做一次水平翻转则有( 256 − 224 ) ∗ ( 256 − 224 ) ∗ 2 = 2048 种可能

       在测试时,网络通过提取5个224*224的块(四个角的图像块和中心的图像块)和他们的水平映射(因此总计10个图像块)来做预测,并将网络Softmax层在10个块上作的预测进行平均。

  • 改变训练集图片RGB通道的强度,在此之前需要对原始RGB图像进行主成分分析

[I_{xy}^{R},I_{xy}^{G},I_{xy}^{B}]=[I_{xy}^{R},I_{xy}^{G},I_{xy}^{B}]^{T}+[p1,p2,p3][a1\lambda 1,a2\lambda 2,a3\lambda 3]^{T}

p_{i},\lambda i 为RGB像素值的3x3协方差矩阵,a_{i}是均值为0标准差为0.1的高斯扰动。个人推测应该是先对RGB图像resize成3x(256x256),归一化后根据协方差公式得到3x3矩阵,再利用奇异值分解得到特征值λ和特征向量p


3.6 dropout

alexnet在前两层全连接层前使用了dropout,以0.5的概率使得每个隐藏层的神经元输出0,既不参与前向传播,也不参与反向传播。这种方法弱化了神经元之间的依赖性。 

4.参考:


1、【深度学习论文 01-1】AlexNet论文翻译 - 最菜程序员Sxx - 博客园

2、卷积神经网络超详细介绍_呆呆的猫的博客-CSDN博客_卷积神经网络

3、目标识别基础——alexnet模型(代码复现详解)_哔哩哔哩_bilibili

4、AlexNet 中的 LRN(Local Response Normalization) 是什么 - 知乎

5、AlexNet深度学习图像分类算法_哔哩哔哩_bilibili

6、AlexNet pytorch实现_明天一定早睡早起的博客-CSDN博客_pytorch实现alexnet

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

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

相关文章

我国天宫空间站以及各个仓位介绍

一、天宫空间站 天宫空间站&#xff08;China Space Station&#xff09;是中国从2021年开始建设的一个模块化空间站系统&#xff0c;为人类自1986年的和平号空间站及1998年的国际空间站后所建造的第三座大型在轨空间实验平台&#xff0c;基本构型由天和核心舱、问天实验舱和梦…

Head First设计模式(阅读笔记)-07.适配器模式

火鸡冒充鸭子 现在缺少一个绿头鸭对象&#xff0c;需要用野生火鸡对象冒充一下&#xff0c;但是二者的接口都不一样该怎么去冒充呢&#xff1f; // 鸭子接口 public interface Duck{public void quack(); // 呱呱叫public void fly(); // 飞行 } // 火鸡接口 public interfac…

应力奇异,你是一个神奇的应力!

在用ANSYS进行压力容器应力分析计算的时候&#xff0c;总会出现一些应力集中的问题&#xff0c;而且&#xff0c;有些应力集中点竟然没办法采用倒圆角的办法消除&#xff0c;采用网格加密方法时&#xff0c;甚至应力值比之前更大。这个情况&#xff0c;大家通常称为应力奇异。 …

springboot-mybatisplus-redis二级缓存

前言 mybatis可以自己带有二级缓存的实现&#xff0c;这里加上redis是想把东西缓存到redis中&#xff0c;而不是mybaits自带的map中。这也就构成了我们看到的springboot mybatisplus redis实现二级缓存的题目。 具体步骤如下&#xff1a; 首先加入需要的依赖 <dependenc…

《InnoDB引擎六》InnoDB 1.0.x版本之前的Master Thread

Master Thread 工作方式 在后台线程中提到&#xff0c;Master Thread是核心的后台线程。InnoDB存储引擎的主要工作都是在一个单独线程中完成的。 InnoDB 1.0.x版本之前的Master Thread Master Thread具有最高的线程优先级别。内部由多个循环组成&#xff1a;主循环(loop)、后台…

[附源码]SSM计算机毕业设计医院仪器设备管理系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

基于萤火虫算法优化的BP神经网络预测模型(Matlab代码实现)

目录 1 概述 2 萤火虫算法 3 萤火虫算法优化BP神经网络的算法设计 3.1 基本思想 3.2 萤火虫算法优化BP神经网络算法 4 运行结果 5 参考文献 6 Matlab代码及文章 1 概述 现实的世界中混沌现象无处不在,大至宇宙,小到基本粒子,都受到混沌理论支配.如气候变化会出 现混沌…

(三)DepthAI-python相关接口:OAK Nodes

消息快播&#xff1a;OpenCV众筹了一款ROS2机器人rae&#xff0c;开源、功能强、上手简单。来瞅瞅~ 编辑&#xff1a;OAK中国 首发&#xff1a;oakchina.cn 喜欢的话&#xff0c;请多多&#x1f44d;⭐️✍ 内容可能会不定期更新&#xff0c;官网内容都是最新的&#xff0c;请查…

[MySQL]-压力测试_TPCC-MySQL

[MySQL]-压力测试_TPCC-MySQL 森格 | 2022年10月 对数据库学习来说&#xff0c;压力测试也是十分必要的一环&#xff0c;本文章主要介绍了TPCC-MySQL这个工具的使用。 一、基本概念 1.1 基准测试VS压力测试 基准测试&#xff1a; 直接简单、易于比较&#xff0c;用于评估服务…

CAD必练图形

这次我们用CAD梦想画图软件绘制一个CAD新手必练图形&#xff0c;它用到的有CAD矩形、直线、圆弧、等分等命令结合起来完成绘制的&#xff0c;可以跟着一起操作一下。 目标图形 操作步骤 1.使用CAD矩形命令&#xff08;快捷键&#xff1a;REC&#xff09;绘制一个长80宽30的矩…

为什么macbook不能删除u盘里东西?苹果电脑如何删除u盘文件

为什么macbook不能删除u盘里东西&#xff1f;有时候&#xff0c;我们会发现U盘不能够在Mac上正常使用&#xff0c;只能够读取U盘上的文件数据&#xff0c;但是若想要对其进行删除或者是编辑操作&#xff0c;完全不能够实现&#xff0c;本文为大家详细介绍了不同情况的不同解决方…

云原生主题学习月|共同学习全球领先的亚马逊云科技云原生课程,组团共学拿奖励~

CSDN 已上线亚马逊云科技超过 60 门中文数字化培训课程&#xff0c;希望为学习者提供亚马逊云科技基础技能知识和最佳实践。 每门课程时长从十分钟到几小时不等&#xff0c;由亚马逊云科技专家打造&#xff0c;其中包括最受欢迎的《亚马逊云科技云从业者必修知识》&#xff0c…

vue3发送验证码倒计时 (防止连点、封装复用)

一、实现思路 倒计时 流程图二、实现一个简单的验证码倒计时 //倒计时初始变量 const codeNum ref(60); // 定时器id let clearId: number; // 发送验证码 const sendCode async () > { // 防止下次点击 如果倒计时的时间不是60 就不执行下面逻辑if (codeNum.value ! 60)…

AcWing算法学习第三节---高精度问题.

系列文章目录 第一节快速排序 第二节二分法 学习路上的风景&#xff0c;我陪你一起去看&#xff0c;编程路上的算法&#xff0c;我陪你一起去学&#xff0c;朋友们你们好&#xff0c;我是夏目浅石&#xff0c;蟹蟹你点开文章和我一同进步&#xff0c;加油&#xff01;遇见更好…

2022Q3手机配件增长榜:手机壳、数据线等供求不断增加

本篇我们将继续来分析22年Q3季度中手机通讯行业的高增长概念。在手机通讯行业中&#xff0c;我们发现了3个高增长品类&#xff0c;分别是&#xff1a;手机耳机、手机壳、数据线。 一、手机配件类高增长概念——手机耳机 手机耳机可以分为不同种类&#xff0c;如&#xff1a;开放…

现代物流有哪些特点?

现代物流的特点有系统化、网络化、信息化、专用化和准时性和柔性化。 现代物流特点一&#xff1a;系统化 现代物流强调了物流体系是一个具有综合性和系统性的过程&#xff0c;以优化物流管理体系为目标&#xff0c;降低物流运营管理成本&#xff0c;实现企业效益提升&#xff0…

python笔记76-types.FunctionType 动态创建函数

前言 types.FunctionType 创建函数有2种方式&#xff1a; 从已有函数的基础上&#xff0c;创建一个新函数从一个compile 构建的函数对象上&#xff0c;创建一个新函数 FunctionType 使用 FunctionType 可以用于判断一个对象是不是函数 from types import FunctionType, Me…

中国互联网综合实力100强:猿辅导第39

11月2日&#xff0c;中国互联网企业综合实力指数发布会暨百家企业高峰论坛在厦门成功举办。发布会上&#xff0c;中国互联网协会正式发布了《中国互联网企业综合实力指数&#xff08;2022&#xff09;》以及2022年中国互联网综合实力前百家企业榜单。 北京猿力教育科技有限公司…

腾讯基础面

传送门1. 有了解过C吗&#xff1f;接受转语言吗&#xff1f;2. 有没有了解过一些框架的底层原理、底层优化、数据库的索引优化3. 了解过哪些Map&#xff0c;可以从底层简单说下嘛&#xff1f;4. 你项目中是如何去实现幂等性的&#xff1f;5. RPC的协议讲一讲&#xff0c;怎么处…

开源共建 | TIS整合数据同步工具ChunJun,携手完善开源生态

TIS整合ChunJun实操 B站视频&#xff1a; https://www.bilibili.com/video/BV1QM411z7w5/?spm_id_from333.999.0.0 一、ChunJun 概述 ChunJun是一款易用、稳定、高效的批流统一的数据集成框架&#xff0c;可基于实时计算引擎Flink实现多种异构数据源之间的数据同步与计算&…