news 2026/5/4 5:05:53

深度学习之第八课迁移学习(残差网络ResNet)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深度学习之第八课迁移学习(残差网络ResNet)

目录

简介

一、迁移学习

1.什么是迁移学习

2. 迁移学习的步骤

二、残差网络ResNet

1.了解ResNet

2.ResNet网络—残差结构

三、代码分析

1. 导入必要的库

2. 模型准备(迁移学习)

3. 数据预处理

4. 自定义数据集类

5. 数据加载器

6. 设备配置

7. 训练函数

8. 测试函数

9. 训练配置和执行

整体流程总结

简介

经过长久的卷积神经网络的学习、我们学习了如何提高模型的准确率,但是最终我们的准确率还是没达到百分之八十。原因是因为我们本身模型的局限,面对现有很多成熟的模型,它们有很好的效果,都是经过多次训练选取了最佳的参数,那我们能不能去使用哪些大佬的模型呢?

答案是可以的,这就使用到迁移学习的知识。

深度学习系列之第五课卷积神经网络_CNN_如何训练自己的数据集(暨食物分类案例)

[深度学习之第六课卷积神经网络 (CNN)如何保存和使用最优模型][_CNN 1]

[深度学习之第七课卷积神经网络 (CNN)调整学习率][_CNN 2]

一、迁移学习

1.什么是迁移学习

迁移学习是指利用已经训练好的模型,在新的任务上进行微调。迁移学习可以加快模型训练速度,提高模型性能,并且在数据稀缺的情况下也能很好地工作。

2. 迁移学习的步骤

1、选择预训练的模型和适当的层:通常,我们会选择在大规模图像数据集(如ImageNet)上预训练的模型,如VGG、ResNet等。然后,根据新数据集的特点,选择需要微调的模型层。对于低级特征的任务(如边缘检测),最好使用浅层模型的层,而对于高级特征的任务(如分类),则应选择更深层次的模型。

2、冻结预训练模型的参数:保持预训练模型的权重不变,只训练新增加的层或者微调一些层,避免因为在数据集中过拟合导致预训练模型过度拟合。

3、在新数据集上训练新增加的层:在冻结预训练模型的参数情况下,训练新增加的层。这样,可以使新模型适应新的任务,从而获得更高的性能。

4、微调预训练模型的层:在新层上进行训练后,可以解冻一些已经训练过的层,并且将它们作为微调的目标。这样做可以提高模型在新数据集上的性能。

5、评估和测试:在训练完成之后,使用测试集对模型进行评估。如果模型的性能仍然不够好,可以尝试调整超参数或者更改微调层。

太多概念,我们直接使用残差网络进行迁移学习。

二、残差网络ResNet

1.了解ResNet

ResNet 网络是在 2015年 由微软实验室中的何凯明等几位大神提出,斩获当年ImageNet竞赛中分类任务第一名,目标检测第一名。获得COCO数据集中目标检测第一名,图像分割第一名。

传统卷积神经网络存在的问题?

卷积神经网络都是通过卷积层和池化层的叠加组成的。 在实际的试验中发现,随着卷积层和池化层的叠加,学习效果不会一直逐渐变好,反而出现2个问题:

1、梯度消失和梯度爆炸 梯度消失:若每一层的误差梯度小于1,反向传播时,网络越深,梯度越趋近于0 梯度爆炸:若每一层的误差梯度大于1,反向传播时,网络越深,梯度越来越大

2、退化问题

如何解决问题?

为了解决梯度消失或梯度爆炸问题,论文提出通过数据的预处理以及在网络中使用 BN(Batch Normalization)层来解决。 为了解决深层网络中的退化问题,可以人为地让神经网络某些层跳过下一层神经元的连接,隔层相连,弱化每层之间的强联系。这种神经网络被称为 残差网络 (ResNets)。

实线为测试集错误率 虚线为训练集错误率

2.ResNet网络—残差结构

ResNet的经典网络结构有:ResNet-18、ResNet-34、ResNet-50、ResNet-101、ResNet-152几种,其中,ResNet-18和ResNet-34的基本结构相同,属于相对浅层的网络,后面3种的基本结构不同于ResNet-18和ResNet-34,属于更深层的网络。

不论是多少层的ResNet网络,它们都有以下共同点:

  • 网络一共包含5个卷积组,每个卷积组中包含1个或多个基本的卷积计算过程(Conv-> BN->ReLU)

  • 每个卷积组中包含1次下采样操作,使特征图大小减半,下采样通过以下两种方式实现:

    • 最大池化,步长取2,只用于第2个卷积组(Conv2_x)
    • 卷积,步长取2,用于除第2个卷积组之外的4个卷积组
  • 第1个卷积组只包含1次卷积计算操作,5种典型ResNet结构的第1个卷积组完全相同,卷积核均为7x7, 步长为均2

  • 第2-5个卷积组都包含多个相同的残差单元,在很多代码实现上,通常把第2-5个卷积组分别叫做Stage1、Stage2、Stage3、Stage4

  • 首先是第一层卷积使用kernel 7∗7,步长为2,padding为3。之后进行BN,ReLU和maxpool。这些构成了第一部分卷积模块conv1。

  • 然后是四个stage,有些代码中用make_l

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 13:58:24

计算机视觉系列之opencv语法基础案例分析之银行卡号识别

简介 计算机视觉系列第一课opencv语法(一)保姆级教学 计算机视觉系列第一课opencv语法(二)保姆级教学 计算机视觉系列第一课opencv语法(三)保姆级教学 [计算机视觉第一课opencv(四)保姆级教学][opencv 3] 关于计算机视觉的基础内容我们之前已经说完了,今天我们就来用…

作者头像 李华
网站建设 2026/5/4 4:33:30

工业控制场景下模拟I2C通信的完整指南

以下是对您提供的博文《工业控制场景下模拟IC通信的完整指南:原理、实现与鲁棒性设计》进行 深度润色与结构重构后的专业级技术文章 。本次优化严格遵循您的全部要求: ✅ 彻底去除AI痕迹(无模板化表达、无空洞套话、无机械连接词&#xff…

作者头像 李华
网站建设 2026/5/1 15:09:10

Z-Image-Turbo适合哪些场景?这5个最实用

Z-Image-Turbo适合哪些场景?这5个最实用 你有没有过这样的体验: 想快速出一张电商主图,等了半分钟,进度条才走到60%; 客户临时要改三版海报文案,每改一次就得重跑模型; 做教育课件需要配图&…

作者头像 李华
网站建设 2026/5/3 13:00:30

游戏开发中 C++ 枚举的正确用法:必须用 `enum class`

在 Unreal Engine 或其他 C 游戏项目中,枚举常用于表示角色状态、技能类型、网络状态等。必须使用 enum class,原因如下: 1. 避免命名冲突(关键!) 游戏系统多,不同模块可能定义相同名称的状态…

作者头像 李华
网站建设 2026/5/4 18:03:19

C++ 结构体内存对齐终极指南:嵌套结构体如何“占位”?

在 C 开发中,尤其是涉及网络协议、硬件通信或高性能计算时,结构体的内存布局至关重要。你是否曾疑惑:为什么一个只包含 char 和 int 的结构体,sizeof 却是 8 而不是 5? 当结构体嵌套结构体时,内存是如何排布…

作者头像 李华
网站建设 2026/5/1 13:31:46

5个维度解析OR-Tools:从入门到解决资源调度问题

5个维度解析OR-Tools:从入门到解决资源调度问题 【免费下载链接】or-tools Googles Operations Research tools: 项目地址: https://gitcode.com/gh_mirrors/or/or-tools 你是否遇到过这些决策难题? 生产经理为订单排期焦头烂额,配送…

作者头像 李华