昇思25天学习打卡营第23天|ResNet50图像分类

news2024/12/26 9:21:42

课程打卡凭证

ResNet网络

ResNet(Residual Networks,残差网络)是一种深度神经网络结构,它的核心思想是引入了“残差学习”来解决深度网络中的退化问题。在深度神经网络中,当网络层数增加到一定程度时,网络的性能可能会出现退化,即准确率不再提升甚至下降,这并不是由于过拟合引起的,如下图所示,20层网络比56层网络的训练误差和测试误差更大。

ResNet通过引入残差连接,允许网络在训练过程中跳过某些层,直接将输入传递到输出,从而保留了原始特征,并使得网络在深度增加时仍然能够保持较好的性能,如下图所示。

数据集准备与加载

下载数据集。

导入必要的库和模块,设置参数的初始值。

根据不同的用途(训练或测试)加载 CIFAR-10 数据集,并设置并行线程和随机打乱数据。如果是训练集,添加随机裁剪和随机水平翻转。再对所有数据都进行统一的操作,包括图像大小调整、归一化、标准化和维度转换(从 HWC 转为 CHW)。最后将数据集按批量大小进行批量处理。

从训练数据集中获取前六张图片及其对应的标签,并将其可视化,结果如图所示。

构建网络

ResNet的网络结构主要由多个残差块(Residual Building Block)组成,每个残差块包含多个级联的卷积层和一个残差连接。残差连接是跳过一层或多层的连接,它将输入直接加到残差块的输出上,形成残差学习的基本单元。它主要由以下几个部分组成:

输入层:接收输入图像,并进行初步处理。

卷积层:使用较大的卷积核进行卷积操作,以提取图像的基本特征。

卷积组:每个卷积组包含多个残差块,每个残差块由多个级联的卷积层和一个残差连接组成。随着网络深度的增加,卷积核的数量和大小也会相应调整。

输出层:对卷积组的输出进行全局平均池化,并连接全连接层进行分类或其他任务。

导入必要的模块,初始化重要参数。

定义标准的残差块,它带有两个 3x3 的卷积层和一个可选的下采样层,用以构建ResNet网络。

通过ResidualBlock类实现了Bottleneck残差块,通过引入 1x1 卷积层,显著减少了计算量,同时保持了较高的特征提取能力。

该函数用于构建由多个残差块(Residual Block)堆叠而成的网络层,它通过在第一层中添加下采样层,可以在输入维度和输出维度不匹配时调整输入维度,从而确保残差连接的正确性。

ResNet类实现了一个典型的深度卷积神经网络结构,采用了残差块来缓解深层网络中的梯度消失问题。通过在每个残差块中引入shortcut connection,可以直接将输入信息传递到输出,从而更有效地训练深层神经网络。

_resnet函数可以初始化一个ResNet模型,它根据指定的残差块类型和层数构建模型,并且可以选择加载预训练模型参数。resnet50函数通过调用_resnet函数,使用特定的参数配置,构建并返回一个ResNet50模型实例。

模型训练与评估

定义ResNet50网络并加载预训练模型,获取全连接层输入层的大小并重新定义全连接层,再替换网络中的全连接层。

设置一个动态的学习率策略,使用动量优化器和交叉熵损失函数进行训练,定义前向计算和梯度计算函数,执行训练步骤,更新模型参数并返回损失值。

为模型训练和验证准备数据加载器,并设置保存最佳模型的路径。

定义训练函数,用于训练模型,每个批次计算损失并更新模型参数,同时打印训练进度,并返回每个epoch的平均损失值。评估函数用于验证模型,在验证集上计算准确率,返回模型的预测准确率。

开始训练模型,结果如下图所示。

可视化模型预测

结果如下图所示。

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

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

相关文章

解读:基于图的大模型提示技术

【引子】大模型的兴起, 使得读论文成为了学习中的一种常态。如果一篇论文没有读懂,不用担心,可以再读一篇该领域内容相近的论文,量变可能会产生质变。就像编程语言一样,你永远无法精通一门编程语言,除非&am…

【Gin】精准应用:Gin框架中工厂模式的现代软件开发策略与实施技巧(上)

【Gin】精准应用:Gin框架中工厂模式的现代软件开发策略与实施技巧(上) 大家好 我是寸铁👊 【Gin】精准应用:Gin框架中工厂模式的现代软件开发策略与实施技巧(上)✨ 喜欢的小伙伴可以点点关注 💝 前言 本次文章分为上下两部分&…

linux进程优先级——优先值、调度算法、进程性质

前言:本篇内容主要讲解linux下进程的优先级。 优先级的内容相对较少, 最重要的内容就是cpu的调度方法。 内容相对容易理解。 ps:本节内容适合了解冯诺依曼和操作系统的管理方式以及进程PCB的友友们进程观看 进程的优先级是什么 进程的优先级…

【制作100个unity游戏之31】用unity制作一个爬坡2d赛车小游戏

最终效果 【制作100个unity游戏之31】用unity制作一个爬坡2d赛车小游戏 前言 今天用unity制作一个简单的爬坡2d赛车小游戏 素材 https://www.spriters-resource.com/mobile/hillclimbracing/ 拼装车素材 车身添加碰撞体,摩檫力0 轮胎添加碰撞体和刚体&#xff0…

CVE-2020-7248 OpenWRT libubox堆栈溢出漏洞复现(更新中)

提要 该文档会一直处于更新当中,当状态为完毕后,才是更新完成。由于网络上关于该漏洞原理的分析文档和资源实在是太少,而本人关于该方向也才是刚入门,能力有限,所以复现需要的时间较长,需要补充和学习的东西…

《从C/C++到Java入门指南》- 9.字符和字符串

字符和字符串 字符类型 Java 中一个字符保存一个Unicode字符,所以一个中文和一个英文字母都占用两个字节。 // 计算1 .. 100 public class Hello {public static void main(String[] args) {char a A;char b 中;System.out.println(a);System.out.println(b)…

Spring通过工厂方法进行配置

在Spring的世界中, 我们通常会利用 xml配置文件 或者 annotation注解方式来配置bean实例! 在第一种利用 xml配置文件 方式中, 还包括如下三小类 反射模式(我们前面的所有配置都是这种模式)工厂方法模式Factory Bean模…

跳妹儿学编程之ScratchJr(10):结束积木篇—放学回家

博主资深软件架构师,拥有13年大型软件与互联网系统开发、设计和架构经验,曾就职于华为,现任职于国内知名互联网公司。平时在家教咱家“跳妹儿”编程,并将心得和过程记录下来。希望可以帮助更多对编程感兴趣的家庭。 前言 继上一篇…

FastDFS分布式存储

文章目录 FastDFS原理FastDFS架构文件的上传文件的下载 FastDFS原理 FastDFS架构 Tracker server 跟踪服务器主要做挑度工作,起到均衡的作用,负责管理所有的Storage server和group Storage server 储服务器,主要提供容量和备份服务;以group为单位&…

VMware虚拟机下安装Ubuntu(详细教程,最小系统的安装,含VMware Tools)

1.VM的下载安装 VMware的下载安装教程_vm16 pro下载-CSDN博客 2. Ubuntu 下载 在官网或者镜像站下载所需版本的.ios镜像,这个镜像在接下来的步骤中会用到: Ubuntu 22.04.4 LTS 下载 和 清华大学开源软件镜像站 - Ubuntu 22.04.4 下载 3. 创建虚拟机 […

【开发实战】QT5 + OpenCV4 开发环境配置应用演示

前言 作为深度学习算法工程师,必须要掌握应用开发技能吗?搞工程肯定是必须要会界面开发,QT就是一个很不错的选择。本文以QT5.15 OpenCV4.8 OpenVINO2023为例,搭建应用开发环境,演示深度学习模型的QT应用案例。 开发…

重拾CSS,前端样式精读-函数(颜色,计算,图像和图形)

前言 本文收录于CSS系列文章中,欢迎阅读指正 在计算机编程中,函数有着重要的作用和意义,它可以实现封装,复用,模块化,参数等功能效果,在如何在CSS中写变量?一文带你了解前端样式利…

聊聊HuggingFace Transformer

项目组件 一个完整的transformer模型主要包含三部分:Config、Tokenizer、Model。 Config 用于配置模型的名称、最终输出的样式、隐藏层宽度和深度、激活函数的类别等。 示例: {"architectures": ["BertForMaskedLM"],"atte…

蓝屏死机不再怕!CrowdStrike故障修复指南中心上线!

系统之家于7月22日发出最新报道,安全公司CrowdStrike因其Windows更新引发全球 850 万台电脑蓝屏死机问题后,上线了全新的“修复和指南中心”(Remediation and Guidance Hub),该中心汇集了与其错误更新相关的详细信息&a…

昇思25天学习打卡营第25天 | RNN实现情感分类

学习心得:RNN实现情感分类 在自然语言处理(NLP)的领域中,情感分类是一个极具挑战性的任务,它要求模型能够准确地从文本中识别出情感倾向。通过使用MindSpore框架和RNN模型进行情感分类,我获得了许多有关构…

【QT】定时器事件 - QTimerEvent QTimer

qt 系统 - 定时器 定时器1. QTimerEvent2. QTimer3. 获取系统日期及时间 定时器 Qt 中在进行窗口程序的处理过程中,经常要周期性的执⾏某些操作,或者制作⼀些动画效果,使用定时器就可以实现。所谓定时器就是在间隔⼀定时间后,去执…

《python语言程序设计》第6章第1题数,数学方面:五角数n(3n-1)/2 前100个五角数

第4次做第6章 def getPentagonalNumber(n):count 0for i in range(1, n):count 1pen_num round(i * ((3 * i) - 1) / 2)print(f"{pen_num}", end" ")if count % 10 0:print()getPentagonalNumber(100)

Java语言程序设计基础篇_编程练习题**15.15 (几何问题:添加或删除点)

**15.15 (几何问题:添加或删除点) 请编写一个程序,让用户在面板上单击以自动创建或移去点(参见15-28a)。当用户左击鼠标时(主按钮),就创建一个点并且显示在鼠标的位置,用户还可以将鼠标移到一个点上,然后右击鼠标(次按钮)以移去这…

C语言-网络编程-UDP通信创建流程

UDP 通信创建流程 UDP 是⼀个传输层的⽆连接的协议,我们编写代码⼀般是分为两个端。⼀个我们称之为发送端,另⼀ 个我们称之为接收端。正常⼀般是接收端先运⾏,然后等待结束发送端发送过来的数据。 创建套接字 首先,我们需要创建…

JDK8升级到JDK17,报错Error:java:错误:不支持的发行版本5

1 问题描述: 我原来用到是JDK8,后来重新安装了JDK17后,并更换了JAVA_HOME的配置,在CDM上面查看JAVA版本确认安装无误。 当我打开IDEA运行代码时,就报错java:错误:不支持的发行版本5,至始至终我都…