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

课程打卡凭证

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.mfbz.cn/a/842954.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深入理解Linux网络(二):UDP接收内核探究

深入理解Linux网络(二):UDP接收内核探究 一、UDP 协议处理二、recvfrom 系统调⽤实现 一、UDP 协议处理 udp 协议的处理函数是 udp_rcv。 //file: net/ipv4/udp.c int udp_rcv(struct sk_buff *skb) {return __udp4_lib_rcv(skb, &udp_…

什么是单例模式,有哪些应用?

目录 一、定义 二、应用场景 三、6种实现方式 1、懒汉式,线程不安全。 2、懒汉式,线程安全 3、双检锁/双重校验锁(DCL,即 double-checked locking) 4、静态内部类方式-------只适用于静态域 5、饿汉式 6、枚举…

Linux系统编程基础

Linux操作系统 Linux不是一个具体的操作系统,而是一类操作系统的总称,具体版本成为发行版。 Red Hat:目前被IBM收购,收费版,目前最大的Linux供应商CentOS: Red Hat退出的免费版Ubuntu:界面比较友…

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

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

【C语言】动态内存管理(上)

文章目录 前言1.为什么要存在动态内存2. malloc和free2.1 malloc2.2 free2.3 使用实例(malloc和free) 3. calloc3.1 calloc例子 前言 本文开始将开始学习C语言中一个比较重要的知识点或者是操作——动态内存管理。由于本次的知识比较重要,为…

科技赋能,智慧粮仓视频综合管理方案助力粮食安全

一、背景需求 随着科技的快速发展,智慧化、智能化管理已成为各行各业的重要发展方向。粮食仓储作为国家粮食安全战略的重要组成部分,其管理的科学性和智能化水平直接关系到粮食的存储安全、品质保障和运营效率。 因此,TSINGSEE青犀提出一套…

GaussDB常见调优指南

文章目录 GaussDB常见调优指南一. Analyze 统计信息解析二. Explain 分布式计划解析三. 性能调优总体策略详解四. 性能调优之坏味道 SQL 识别五. 性能调优之好味道表定义六. 性能调优之 SQL 改写七. 性能调优之路径干预八. 性能调优之 Plan hint 运用九. 性能调优之 GUC 参数调…

Linux 12:多线程2

1. 生产者消费者模型 生产者消费者模型有三种关系,两个角色,一个交易场所。 三种关系: 生产者之间是什么关系?竞争 - 互斥 消费者和消费者之间?竞争 - 互斥 消费者和消费者之间?互斥和同步 两个角色: 生产者和消费者 一个交…

git 提交的进阶操作

cherry-pick cherry-pick 是 Git 中的一种操作,允许你从一个分支中选择特定的 commit,并将其应用到另一个分支。它的主要用途是将特定的更改引入到其他分支,而无需合并整个分支历史。这在修复 bug 或者移植某些功能时特别有用。 cherry-pick 的使用场景 Bug 修复: 例如,你…

安卓手机怎么格式化?格式化后数据如何恢复?1篇文章全搞定

随着时间的推移,手机中的数据越积越多,有时候我们可能需要对其进行一次彻底的大扫除——格式化。它就像一把双刃剑,一方面能够清除手机中的冗余数据,提升手机的运行效率;另一方面,如果不慎操作,…

Postman导出excel文件

0 写在前面 在我们后端写接口的时候,前端页面还没有出来,我们就得先接口测试,在此记录下如何使用postman测试导出excel接口。 如果不会使用接口传参可以看我这篇博客如何使用Postman 1 方法一 2 方法二 3 写在末尾 虽然在代码中写入文件名…

Apache BookKeeper 一致性协议解析

导语 Apache Pulsar 是一个多租户、高性能的服务间消息传输解决方案,支持多租户、低延时、读写分离、跨地域复制(GEO replication)、快速扩容、灵活容错等特性。Pulsar 存储层依托于 BookKeeper 组件,所以本文简单探讨一下 BookK…

QXlsx读写excel

QXlsx读写excel 安装 QXlsx使用 qmake使用 CMake 基本用法1. 写入 Excel 文件2. 读取 Excel 文件 详细用法1. 设置单元格样式2. 合并单元格3. 创建图表4. 设置列宽和行高 完整示例 QXlsx 是一个用于在 Qt 应用中读写 Excel 文件的第三方库。它提供了丰富的 API,可以…

react 快速入门思维导图

在掌握了react中一下的几个步骤和语法,基本上就可以熟练的使用react了。 1、组件的使用。react创建组件主要是类组件和函数式组件,类组件有生命周期,而函数式组件没有。 2、jsx语法。react主要使用jsx语法,需要使用babel和webpa…

由delete引起的锁扩大

这句话意思是:假设delete语句物理删除数据,那么delete事务会持有gap lock,那么会造成锁扩大,而实际上delete操作会转为update操作,最终delete事务持有的gap lock退化为record lock,不会造成锁扩大 下面用SQ…

FPGA:频闪灯设计

1、需求 若在FPGA上实现LED灯一秒闪烁一次,先进行计算,1秒闪烁一次,即周期为1秒,开发板XC7A35TFFG-2的基本时钟输入由板载 50MHz 有源晶振提供,即频率为f 50MHz 。 则一个周期为 T 1 f 1 50 M H z 20 n s T\frac{…

十七、【机器学习】【非监督学习】- K-均值 (K-Means)

系列文章目录 第一章 【机器学习】初识机器学习 第二章 【机器学习】【监督学习】- 逻辑回归算法 (Logistic Regression) 第三章 【机器学习】【监督学习】- 支持向量机 (SVM) 第四章【机器学习】【监督学习】- K-近邻算法 (K-NN) 第五章【机器学习】【监督学习】- 决策树…

学习系列一:YOLO系列目标检测框架之间介绍及对比

YOLO系列目标检测框架之间介绍及对比 华为HCIP AI高级工程师证书, 华为HCIA AI证书,目前从事视觉算法工作 文章目录 YOLO系列目标检测框架之间介绍及对比前言一、YOLOv1二、YOLOv2三、YOLOv3四、YOLOv4五、YOLOv5及后续算法 前言 YOLO系列算法 YOLO 创…

PyCharm创建一个空的python项目

1.设置项目路径 2.配置python解释器 右下角可以选择always

基于SpringBoot+Vue的财务管理系统(带1w+文档)

基于SpringBootVue的财务管理系统(带1w文档) 基于SpringBootVue的财务管理系统(带1w文档) 财务管理系统的开发运用java技术、springboot框架,MIS的总体思想,以及Mysql等技术的支持下共同完成了该系统的开发,实现了财务管理的信息化&#xff0…