PyTorch实战:常用卷积神经网络搭建结构速览

news2024/10/7 14:29:11

目录

前言

常用卷积神经网络

1.AlexNet

2.VGGNet

3.GoogLeNet

4.ResNet

总览

 


前言

PyTorch可以说是三大主流框架中最适合初学者学习的了,相较于其他主流框架,PyTorch的简单易用性使其成为初学者们的首选。这样我想要强调的一点是,框架可以类比为编程语言,仅为我们实现项目效果的工具,也就是我们造车使用的轮子,我们重点需要的是理解如何使用Torch去实现功能而不要过度在意轮子是要怎么做出来的,那样会牵扯我们太多学习时间。以后就出一系列专门细解深度学习框架的文章,但是那是较后期我们对深度学习的理论知识和实践操作都比较熟悉才好开始学习,现阶段我们最需要的是学会如何使用这些工具。

深度学习的内容不是那么好掌握的,包含大量的数学理论知识以及大量的计算公式原理需要推理。且如果不进行实际操作很难够理解我们写的代码究极在神经网络计算框架中代表什么作用。不过我会尽可能将知识简化,转换为我们比较熟悉的内容,我将尽力让大家了解并熟悉神经网络框架,保证能够理解通畅以及推演顺利的条件之下,尽量不使用过多的数学公式和专业理论知识。以一篇文章快速了解并实现该算法,以效率最高的方式熟练这些知识。


博主专注数据建模四年,参与过大大小小数十来次数学建模,理解各类模型原理以及每种模型的建模流程和各类题目分析方法。此专栏的目的就是为了让零基础快速使用各类数学模型、机器学习和深度学习以及代码,每一篇文章都包含实战项目以及可运行代码。博主紧跟各类数模比赛,每场数模竞赛博主都会将最新的思路和代码写进此专栏以及详细思路和完全代码。希望有需求的小伙伴不要错过笔者精心打造的专栏:

一文速学-数学建模常用模型icon-default.png?t=N7T8https://blog.csdn.net/master_hunter/category_10967944.html


常用卷积神经网络

上篇文章我十分详细讲述了卷积神经网络的特点以及运算和结构搭建。强烈推荐读者多看几遍,以后搭建论文神经网络或者是面试卷积神经网络细节部分都能够有所联想记忆。那么根据上篇文章的学习,我们已经拥有了搭建卷积神经网络的能力,也就是拥有了造车的能力,可以根据数据和图片搭建自己想要的卷积神经网络,但是想要搭建一些已经验证能力的卷积神经网络还是有一定差距的。本篇文章主要带大家再次熟悉一下卷积神经网络的搭建过程,想靠一篇文章来学会卷积神经网络显然是异想天开的,我们需要更多的实践去使用才能掌握。

文章分为两部分,第一部分主要对常用的卷积神经网络简述介绍,第二部分将参考论文详细搭建每个卷积神经网络并且完成数据集的分类。

1.AlexNet

AlexNet是一个经典的卷积神经网络,它在2012年的ImageNet图像分类挑战中取得了第一名。ImageNet是自2010年以来,每年举办一次的全球性图片分类比赛。自从该竞赛举办开始,业界便视其为深度学习标准数据集。后续很多优秀的神经网络模型都是由此比赛诞生。

AlexNet出现后打破了原来众多学者的认知,它首次证明了学习到的特征可以超越手工设计的特征,从而越来越多的人开始重新审视深度学习算法并加入到研究的浪潮中。

有兴趣的可以阅读论文:

《ImageNet Classification with Deep Convolutional Neural Networks》icon-default.png?t=N7T8http://www.cs.toronto.edu/~fritz/absps/imagenet.pdf

AlexNet是一个相对较深的神经网络,相比于以前的网络结构,它引入了更多的卷积层和全连接层。这使得网络可以学习更加复杂、抽象的特征,从而提升了图像分类的性能。

  • ReLU激活函数:在AlexNet中,使用了ReLU(Rectified Linear Unit)作为激活函数,相比于传统的Sigmoid函数,ReLU能够更好地解决梯度消失的问题,加速了网络的收敛速度。
  • 局部响应归一化(LRN)层:引入了LRN层,它在激活函数之前对神经元的输出进行归一化,使得响应相对较大的神经元被抑制,从而提升了网络的泛化能力。
  • Dropout正则化:在全连接层之间引入了Dropout层,这有助于防止过拟合,提升了网络的泛化能力。
  • 大尺寸卷积核和重叠池化:AlexNet使用了较大的卷积核和重叠的池化层,这使得网络能够捕捉到更大范围内的特征,并减小了特征图的大小。
  • 数据增强和多尺度训练: 在训练阶段,AlexNet使用了数据增强技术,包括随机裁剪、水平翻转等,以及在不同尺度下训练多个模型,从而提升了网络的鲁棒性和性能。

AlexNet的网络结构:

  从上图看,在网络设计上其实并非如上图所示,上图包含了GPU通信的部分。这是由当时GPU内存的限制引起的,作者使用两块GPU进行计算,因此分为了上下两部分。但是,以目前GPU的处理能力,单GPU足够了,因此其结构图可以如下所示:

 

2.VGGNet

VGGNet(Visual Geometry Group Network)是由牛津大学视觉几何组(Visual Geometry Group)提出的深度卷积神经网络架构,它在2014年的ImageNet图像分类挑战中取得了优异的成绩。VGGNet之所以著名,一方面是因为其简洁而高效的网络结构,另一方面是因为它通过深度堆叠的方式展示了深度卷积神经网络的强大能力。

VGGNet探索了卷积神经网络的深度与其性能之间的关系,成功地构筑了16~19层深的卷积神经网络,证明了增加网络的深度能够在一定程度上影响网络最终的性能,使错误率大幅下降,同时拓展性又很强,迁移到其它图片数据上的泛化性也非常好。到目前为止,VGG仍然被用来提取图像特征。

  • 网络结构:VGGNet主要由卷积层和全连接层组成,整个网络采用了相对较小(3x3)的卷积核,以及较小的池化窗口(2x2的最大池化),从而保持了网络结构的简洁性。
  • 深度和宽度: VGGNet的主要特点是通过深度和宽度的增加来提升网络性能。它通过不断加深网络结构,使得特征图能够在不同层次上学到越来越抽象的特征。同时,VGGNet采用了相对较大的卷积核,这使得网络具有更大的感受野,能够捕捉到更广阔的上下文信息。
  • 卷积层的堆叠: VGGNet通过多次堆叠相同大小的卷积层和池化层,从而逐步减小特征图的大小,增加通道数,提升网络对图像特征的抽象能力。
  • 全连接层: 在卷积层之后,VGGNet采用了多层的全连接层来实现分类任务。这些全连接层将高维的特征图映射到最终的类别得分。
  • ReLU激活函数: 在每个卷积层和全连接层之后都采用了ReLU作为激活函数,这有助于缓解梯度消失的问题,提升网络的收敛速度。
  • Dropout正则化: VGGNet在全连接层之间引入了Dropout层,以防止过拟合。
  • Batch Normalization: 虽然VGGNet并没有采用Batch Normalization(BN)层,但后续的一些网络结构会在卷积层后面添加BN层来加速训练。

我们来看看VGGNet的网络结构:

VGGNet包含两种结构,分别为16层和19层。VGGNet结构中,所有卷积层的kernel都只有3*3。VGGNet中连续使用3组3*3kernel的原因是它与使用1个7*7kernel产生的效果相同,然而更深的网络结构还会学习到更复杂的非线性关系,从而使得模型的效果更好。该操作带来的另一个好处是参数数量的减少,因为对于一个包含了C个kernel的卷积层来说,原来的参数个数为7*7*C,而新的参数个数为3*(3*3*C)。

 VGG16Net网络结构:

内存消耗主要来自早期的卷积,而参数量的激增则发生在后期的全连接层。

VGGNet的优点:

  1. 简单明了的结构: VGGNet的结构非常简单直观,由连续的卷积层和池化层组成,使得网络结构易于理解。

  2. 便于迁移学习: VGGNet的结构可以很容易地应用于其他任务,也使得它成为了迁移学习的一个良好基础。

  3. 较少的超参数: 相对于GoogLeNet,VGGNet的超参数较少,因此更容易调整和训练。

VGGNet的缺点:

  1. 较大的参数数量: 由于采用了大量的卷积层,导致VGGNet的参数数量较大,训练和推理过程需要更多的计算资源。

  2. 容易出现过拟合: 由于参数量较大,需要更多的数据来避免过拟合问题。

3.GoogLeNet

GoogLeNet,也被称为Inception V1,是谷歌团队在2014年提出的一个深度卷积神经网络架构,它在当年的ImageNet图像分类挑战中取得了领先地位。GoogLeNet的主要特点是采用了一种称为“Inception模块”的网络结构,通过多层次的特征抽取和组合,使得网络可以同时在不同尺度上提取特征,从而获得了非常强大的分类性能。

  • Inception模块: GoogLeNet最大的特点就是采用了Inception模块,这是一种具有多个并行卷积操作的模块。这样的设计可以让网络同时学习到不同尺度和抽象级别的特征,从而提升了网络对图像的理解能力。
  • 多尺度的特征提取: Inception模块通过使用不同大小的卷积核(1x1、3x3、5x5)和最大池化层来处理输入特征图,然后将它们合并在一起。这样可以让网络在不同尺度上获取信息,从而捕获到更丰富的图像特征。
  • 1x1卷积核的作用: 1x1卷积核被称为逐点卷积(pointwise convolution),它可以用来降低通道数或者增加通道数。这使得网络能够在保持计算量相对较小的情况下,增加了网络的复杂性和表达能力。
  • 全局平均池化: GoogLeNet不使用全连接层,而是采用了全局平均池化层,将特征图的每个通道的特征值求平均,然后直接连接到分类器中。这样的设计可以降低网络的参数量,减少过拟合的可能性。
  • 辅助分类器: 除了主分类器外,GoogLeNet在中间层引入了两个辅助分类器。这两个辅助分类器在训练过程中会加入总损失中,有助于减轻梯度消失问题,加速网络的收敛。
  • Inception的多次堆叠: GoogLeNet通过多次堆叠Inception模块,构建了一个深度的网络结构,从而获得了强大的特征抽取能力。
  • Dropout和Batch Normalization: GoogLeNet在全连接层之间采用了Dropout层来防止过拟合,并在卷积层之后使用了Batch Normalization来加速训练。

GoogLeNet最初的想法很简单,就是若想要得到更好的预测效果,就要增加网络的复杂度,即从两个角度出发:网络深度和网络宽度。但是二者都需要付出一定的代价,首先更复杂的网络意味着更多的参数,就算是ILSVRC这种包含了1000类标签的数据也很容易过拟合。

再者是更复杂的网络会带来更大的计算资源的消耗,而且当kernel个数设计不合理时导致kernel中的参数没有被完全利用(多数权重都趋近于0)时,会导致大量计算资源的浪费。

GoogLeNet引入了inception结构来解决这个问题,其中涉及了大量的数学推导和原理,感兴趣的推荐阅读:Going Deeper with Convolutionsicon-default.png?t=N7T8https://arxiv.org/abs/1409.4842这里不作详解,不然都得另开篇文章,内容太多了。除了inception结构,GoogLetNet的另外一个特点是主干网络部分全部使用卷积网络,仅仅在最终分类部分使用全连接层。

GoogLeNet和VGGNet是两种非常成功的深度卷积神经网络架构,它们各自有着不同的优缺点:

GoogLeNet的优点:

  1. 更高的效率: GoogLeNet相比于VGGNet在同等性能下,拥有更少的参数量。这使得它在相同计算资源下,可以处理更大规模的任务。

  2. 更深的网络结构: GoogLeNet通过巧妙的Inception模块设计,使得可以构建非常深的网络,而不容易出现梯度消失或爆炸的问题。

  3. 多尺度特征提取: Inception模块可以同时在不同尺度上提取特征,使得网络能够捕获到丰富的图像信息。

  4. 全局平均池化: 使用全局平均池化代替全连接层,可以大幅减少参数数量,降低过拟合的风险。

GoogLeNet的缺点:

  1. 相对复杂的网络结构: 由于Inception模块的设计相对复杂,导致GoogLeNet的网络结构不太容易理解。

  2. 训练时间较长: 由于网络深度较大,训练GoogLeNet需要相对更长的时间。

  3. 难以可视化和解释: 由于网络结构的复杂性,GoogLeNet的内部工作原理相对难以可视化和解释,使得难以理解网络的决策过程。

GoogLeNet相对于VGGNet在网络结构设计上更加灵活和高效,适用于大规模任务。而VGGNet在结构上更为简单直观,容易理解和调整,适用于中小规模的任务,也便于迁移学习。选择合适的网络取决于任务的具体需求、计算资源和数据规模等因素。

4.ResNet

在ResNet提出之前,所有的神经网络都是通过卷积层和池化层的叠加组成的。
人们认为卷积层和池化层的层数越多,获取到的图片特征信息越全,学习效果也就越好。但是在实际的试验中发现,随着卷积层和池化层的叠加,不但没有出现学习效果越来越好的情况,反而两种问题:

  • 1.梯度消失和梯度爆炸
    • 梯度消失:若每一层的误差梯度小于1,反向传播时,网络越深,梯度越趋近于0
    • 梯度爆炸:若每一层的误差梯度大于1,反向传播时,网络越深,梯度越来越大
  • 2.退化问题
    • 随着层数的增加,预测效果反而越来越差。

因此ResNet网络的主要特点和设计思想:

  • 残差块(Residual Block): ResNet引入了残差块的概念,通过在网络中添加了“跳跃连接”(skip connection),使得网络可以直接学习残差(即原始输入与学习到的特征之间的差异),而不是直接学习原始特征。这样可以更容易地训练非常深的网络。
  • 跳跃连接: 残差块中的跳跃连接允许信息在不同层之间直接传递,而不会受到梯度消失或爆炸的影响。这种设计保证了信息在网络中的流动,使得可以训练非常深的网络。
  • Identity Mapping: 在残差块中,如果输入的特征维度与输出的特征维度相同,那么可以直接将输入特征传递给输出,形成一个恒等映射(identity mapping)。这样可以避免了在高维空间中进行不必要的非线性变换,减少了网络的复杂度。
  • Bottleneck 结构: 为了减少计算量和参数数量,ResNet使用了“瓶颈结构”(bottleneck structure)来代替简单的卷积层,它包括了一个1x1卷积层、一个3x3卷积层和一个1x1卷积层,分别用于降维、卷积、升维,从而减少了计算量。
  • 全局平均池化(Global Average Pooling): 在网络的最后一层使用了全局平均池化,将特征图的每个通道的所有值取平均,得到一个与通道数量相同的特征向量,作为最终的预测。
  • Identity Shortcut 和 Projection Shortcut: ResNet根据输入输出的维度是否一致,分别使用了两种不同的跳跃连接方式,即Identity Shortcut(维度一致)和Projection Shortcut(维度不一致),保证了信息的顺利传递。

ResNet的设计思想在于引入了残差学习,通过跳跃连接解决了深度网络训练过程中的梯度问题。ResNet论文提出通过数据的预处理以及在网络中使用 BN(Batch Normalization)层来解决。为了解决深层网络中的退化问题,可以人为地让神经网络某些层跳过下一层神经元的连接,隔层相连,弱化每层之间的强联系。这种神经网络被称为 残差网络 (ResNets)。ResNet论文提出了 residual结构(残差结构)来减轻退化问题,下图是使用residual结构的卷积网络,可以看到随着网络的不断加深,效果并没有变差,而是变的更好了。

 除了残差结果以外,ResNet还沿用了前人的一些可以提升网络性能的效果和设计,如堆叠式残差结构,每个残差模块又由多个小尺度kernel组成,整个ResNet除最后用于分类的全连接层以外都是全卷积的,这大大提升了计算速度。ResNet网络深度有34、50、101、152等多种,50层以上的ResNet也借鉴了类似GoogLeNet的思想,在细节上使用了bottleneck的设计方式。普通卷积层与残差卷基层:

 ResNet网络结构缩略图:


总览

至此我们已经介绍了4种基础的网络结构和设计网络时涉及的主要思想。在ResNet之后,还有很多新的网络结构不断出现,但主要思想大体上都是基于以上4种类型做的一些改进,入Inception-v4的主要思想便是ResNet+Inception。

我们再来看看不同网络结构可以达到的算法精度以及其内存消耗情况:

如与其他模型相比,VGGNet占用最多的计算量并且消耗最大的内存,GoogLeNet是刚刚介绍的四个模型中计算量和内存消耗最小的模型,然而AlexNet虽然计算量不高,但也会占用较大内存且精度不高,而不同大小的ResNet模型性能差异也较大,具体情况需要根据应用场景选择合适的模型。

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

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

相关文章

收藏!一个详细完整的公司局域网搭建案例

你们好,我的网工朋友。 什么是局域网? 所谓局域网(Local Area Network,简称LAN),就是用于将有限范围内(例如一个实验室、一层办公楼或者校园)的各种计算机、终端与外部设备互联成网。 那公司局域网怎么建…

ScrollView如何裁剪粒子特效

1)ScrollView如何裁剪粒子特效 2)Unreal在移动设备中无法使用Stat命令获取到GPU Thread的耗时 3)Unity中如何看到相机视野范围内的剔除结果 这是第354篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、…

Spring Cloud Alibaba Gateway 简单使用

文章目录 Spring Cloud Alibaba Gateway1.Gateway简介2. 流量网关和服务网关的区别3. Spring Cloud Gateway 网关的搭建3.1 Spring Cloud Gateway 配置项的说明3.2 依赖导入3.3 配置文件 Spring Cloud Alibaba Gateway 1.Gateway简介 Spring Cloud Gateway是一个基于Spring F…

图片分割处理(以玉米颗粒的图片分割为例)

问题: 为完成玉米颗粒分类任务,现需要处理训练图片,将以下图片中的玉米颗粒进行分割: 目标: 操作步骤(完整代码附在最后,该部分为解释说明) 一、提取通道并进行二值化 # 提取蓝…

CCC数字钥匙设计【BLE】 --建立安全测距

1、建立安全测距Establish Secure Ranging 车端总共有三种建立安全测距的方式,具体如下: 1) Optimal Flow 2) Sub-Optimal Flow 3) Ranging Recovery Flow 为了确定建立安全测距需要执行哪条流程,车辆需要进行以下流程选择。当车辆和设备…

速码!!BGP最全学习笔记:BGP路径属性与选路原则

BGP路径属性 1、路径属性分类 公认属性:所有BGP路由器都必须能够识别的属性 公认必遵(Well-known Mandatory):必须包括在每个Update消息里。公认任意(Well-known Discretionary):可能包括在某…

数学公式测试

MVP变换 MVP变换用来描述视图变换的任务,即将虚拟世界中的三维物体映射(变换)到二维坐标中。 MVP变换分为三步: 模型变换(model tranformation):将模型空间转换到世界空间(找个好的地方,把所…

4年北漂之路,从软件测试外包到外企的一点小心得

4年前,我独自一人拖着行李箱来到了北京,成为了一名北漂,离开了校园的庇护,只身一人想要在这片陌生的地方闯出一番名堂,可最后却不得人意,面临着和所有北漂群体的共同困局,没有任何归属感&#x…

【Python Fastapi】js上传文件,fastapi处理,js显示回传信息

python from fastapi import FastAPI, File, UploadFile, HTTPException from fastapi.staticfiles import StaticFiles from fastapi.responses import HTMLResponse from typing import List import requestsapp FastAPI()# 配置静态文件目录 app.mount("/static"…

C++程序员,想入坑音视频方向,需要掌握那些技能树?

C程序员,想入坑音视频方向,需要掌握那些技能树? “音视频”方向太笼统了。 最核心的技术包括编码理论,从基础开始就是信号处理,傅里叶变换,DCT, 采样量化插值等等。这些和C没啥关系,就是一套数学理论。 …

工作薄代码之将活动工作表复制到新工作簿等

【分享成果,随喜正能量】得失,可以说是人类事业上的考验,不要因一时的得失影响一生的期许。得失是一时的,理想是一生的。。 我给VBA下的定义:VBA是个人小型自动化处理的有效工具。可以大大提高自己的劳动效率&#xf…

基于SpringBoot的企业客户管理系统

目录 前言 一、技术栈 二、系统功能介绍 管理员功能模块 员工功能模块 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 本论文主要论述了如何使用JAVA语言开发一个企业客户管理系统,本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c…

JVM堆内存转储

堆转储是 JVM 中特定时刻内存中的所有对象的快照。它们对于解决内存泄漏问题并优化 Java 应用程序中的内存使用情况非常有用。 堆转储通常以二进制格式 hprof 文件存储。我们可以使用 jhat 或 JVisualVM 等工具打开和分析这些文件。 下面介绍两种堆转储的方式: 1…

HTTP 请求轻松搞定:Swift 网络编程的不二之选 | 开源日报 No.38

Alamofire/Alamofire Stars: 39.8k License: MIT Alamofire 是一个用 Swift 编写的 HTTP 网络库。 简洁的语法和强大的功能集,让你仅需几行代码就能实现诸如自动重试等强大特性。支持链式请求/响应方法,使得处理网络请求变得如丝般顺滑。完美兼容 Swif…

前端性能测试工具-lighthouse

Lighthouse简介 Lighthouse 是 Google 的一款开源工具,它可以作为一个 Chrome 扩展程序运行,或从命令行运行。只需要给 Lighthouse 提供一个要审查的网址,它将针对此页面运行一连串的测试,然后生成一个页面性能的报告。 Lightho…

【电子通识】办法总比问题多:立式贴片座子整形成卧式

最近在测试一些和电池有关的项目,因为这个电池接口是没有用过的,以前做的一些接口板上没有兼容,导致不方便测试。 拿到座子后发现这个座子是立式贴片的。 但是不方便我做测试接口板工装,因为已经有一个立工座子了,再焊…

多个pdf合并成一个文件,3个方法合并pdf

如何把多个pdf合并成一个文件?在我们日常的工作中,经常会遇到一些需要处理的文件,其中包括PDF文件。特别是当我们需要将多个PDF文件合并成一个PDF文件时,会面临一些困难。这样的情况下,我们的阅读能力会受到限制&#…

ElementUI之首页导航+左侧菜单

一.Mockjs 什么是Mock.js Mock.js的优缺点 安装配置Mock.js 引入jsdev.env.js ​编辑 引入 prod.env.js 导依赖 导入json数据 造数据 测试结果 ​编辑 二. 总线 什么是总线 导入组件 编写路由 跳转主页 编写AppMain 编写LeftNav 编写TopNav 一.Mockjs 什么是Moc…

车载通信架构 —— SOME/IP-SD 协议介绍

车载通信架构 —— SOME/IP-SD 协议介绍 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗…

Xilinx FPGA 7系列 GTX/GTH Transceivers (3) Aurora 8b10b

第一节:Xilinx FPGA 7系列 GTX/GTH Transceivers (1)–了解了GTX硬件的基础知识 第二节:IBERT GTX --通过Ibert IP测试链路通信 学习官方历程 aurora 8b10b single lane 4byte 1硬件介绍 2 实验目标 跑通官方历程。检测发送数据与接收收据一致。 3 IP 生成过程 在 IP Cat…