卷积神经网络-迁移学习

文章目录

  • 一、迁移学习
    • 1.定义与性质
    • 2.步骤
  • 二、Batch Normalization(批次归一化)
  • 三、ResNet网络
    • 1.核心思想
    • 2.残差结构
      • (1)残差块
      • (2)残差结构类型
  • 四、总结

一、迁移学习

迁移学习(Transfer Learning)是一种强大的机器学习方法,其核心思想是将在一个任务(源任务)上学到的知识或模型迁移到另一个相关任务(目标任务)上,以提高新任务的性能。以下是对迁移学习的详细解析:

1.定义与性质

  • 定义:迁移学习是指利用已经训练好的模型,在新的任务上进行微调。迁移学习可以加快模型训练速度,提高模型性能,并且在数据稀缺的情况下也能很好地工作。
  • 性质:迁移学习侧重于将已经学习过的知识迁移应用于新的问题中,以减少目标任务对大量新数据的依赖,加快模型训练速度,并提高模型的泛化能力。

2.步骤

  • 选择预训练的模型和适当的层:通常,我们会选择在大规模图像数据集(如ImageNet)上预训练的模型,如VGG、ResNet等。然后,根据新数据集的特点,选择需要微调的模型层。对于低级特征的任务(如边缘检测),最好使用浅层模型的层,而对于高级特征的任务(如分类),则应选择更深层次的模型。
  • 冻结预训练模型的参数:保持预训练模型的权重不变,只训练新增加的层或者微调一些层,避免因为在数据集中过拟合导致预训练模型过度拟合。
  • 在新数据集上训练新增加的层:在冻结预训练模型的参数情况下,训练新增加的层。这样,可以使新模型适应新的任务,从而获得更高的性能。
  • 微调预训练模型的层:在新层上进行训练后,可以解冻一些已经训练过的层,并且将它们作为微调的目标。这样做可以提高模型在新数据集上的性能。
  • 评估和测试:在训练完成之后,使用测试集对模型进行评估。如果模型的性能仍然不够好,可以尝试调整超参数或者更改微调层。

二、Batch Normalization(批次归一化)

Batch Normalization(批归一化,简称BN)是一种在深度学习中广泛使用的技术,旨在加速神经网络的训练过程并提高模型的性能。
作用:

  • 加速训练过程:Batch Normalization通过减少内部协变量偏移(Internal Covariate Shift),即隐藏层输入分布的变化,使得网络对初始权重选择的依赖较小,对学习率的选择也相对不敏感。这有助于加速神经网络的收敛速度。

  • 提高模型性能:通过归一化操作,Batch Normalization有助于减少梯度消失和梯度爆炸问题,从而提高模型的训练稳定性和泛化能力。

  • 减少过拟合:Batch Normalization在小批量样本上计算均值和方差,可以看作是对小批量样本进行一种正则化处理,有助于减少过拟合现象。

三、ResNet网络

为了解决深层网络中的退化问题,可以人为地让神经网络某些层跳过下一层神经元的连接,隔层相连,弱化每层之间的强联系。这种神经网络被称为 残差网络 (ResNets)。

1.核心思想

ResNet的核心思想在于残差学习(Residual Learning),即网络学习的是输入和输出之间的残差(即差异),而不是直接学习完整的输出。这种设计有助于减少深层网络在训练过程中的信息损失,从而提高训练效率和模型性能。

2.残差结构

残差结构是深度学习中一种非常重要的网络设计思想,它通过引入直接连接来缓解梯度消失、梯度爆炸和退化问题、提升网络性能和泛化能力。

(1)残差块

在这里插入图片描述
一个典型的残差块包含两条路径:一条是主路径(通常由几个卷积层组成),另一条是shortcut路径(直接连接输入和输出)。主路径的输出与shortcut路径的输出相加后作为残差块的最终输出。通过这种方式,残差块能够在保持原始输入信息的同时,对输入进行进一步的特征提取和转换。

(2)残差结构类型

ResNet网络通常采用多个残差块堆叠的结构,这些残差块可以根据不同的需求和网络深度进行调整。例如,ResNet-18、ResNet-34、ResNet-50等变体在网络深度和复杂度之间做了平衡,适用于不同的应用场景。此外,ResNet网络还采用了批量归一化(Batch Normalization)等技术来加速训练过程并提高模型性能。
在这里插入图片描述
在这里插入图片描述
这里我们为大家展示ResNet-18的网络结构,并具体介绍对应的内容。如下:

  • 第一步,残差网络需要的image大小固定为224x224,使用第一步就是确保我们传入的数据大小为224x224,如果不符合,可能会导致后续训练出现问题,所以这里我们可能需要运用数据增强来处理数据。
  • 第二步,我们进入卷积层,一个64x7x7的卷积层,其步长为2、边缘填充为3。该卷积层通常使用较大的卷积核和步长,以快速减小特征图的尺寸,比如这里就将特征图的尺寸减小一倍变成64x112x112。
  • 第三步,进行了最大池化操作,用于进一步减小特征图的尺寸并增加感受野,这里将特征图减小至64x56x56。
  • 第四步,我们进入第一个残差块,内部包含两个卷积层和一个残差连接。第一个卷积层使用3x3的卷积核,步长为1,边缘填充为1,输出通道数与输入相同为64x56x56。该卷积层后通常跟着批量归一化(Batch Normalization)和ReLU激活函数。第二个同样使用3x3的卷积核,步长为1,边缘填充为1。该卷积层后也进行批量归一化和ReLU激活。将两个卷积的结果输出后与shortcut路径的输出相加,这里两者的尺寸匹配,不需要对输入特征图进行操作。下面再一次进行上序残差块的操作,得出结果再次相加。
  • 第五步,这里进入到新一步的残差块,这里第一个卷积层我们将通道数进行加倍操作,由原来的64变成128,同时更改步长为2,使输出结果变成128x28x28,然后同样进行批量归一化(Batch Normalization)和ReLU激活函数。第二个卷积层进行基本一致的操作,只需要将步长更改为1即可,最后我们将输出结果与shortcut路径的输出相加,这里因为我们更改了输出通道与步长,导致两者的尺寸或通道数不匹配,所以我们需要对shortcut路径的输出进行1x1的卷积操作以调整其尺寸和通道数。然后相加并再次进行上序残差块操作。
  • 第六步,下面我们按照上序步骤对其进行同样的通道与步长更改,将其由128x28x28改至256x14x14,再把256x14x14改为512x7x7。并在每次更改通道与步长时,对shortcut路径的输出进行1x1的卷积操作,与输出结果相加即可。
  • 第七步,在经过8次残差块后,我们最终得到512x7x7的输出结果,对该结果进行平均池化,最后得到 FC为(512,1000)。这里最后的结果1000为ResNet_18的特征标签个数,具体运用时,我们应该更改为自己数据集的特征标签个数。可以通过下述方式更改,例如我们的数据集为20,我们可以获取ResNet_18的特征个数,然后创建一个新的全连接层,输入ResNet_18特征,然后再输入自己数据集的输出,即20。
    in_features = resnet_model.fc.in_features  
    resnet_model.fc = nn.Linear(in_features, 20)  
    

残差结构的引入使得训练很深的卷积神经网络成为可能,并在多个图像识别任务中取得了优异的性能。通过残差学习,网络可以更容易地学习到恒等映射,从而缓解深层网络训练中的梯度问题。

四、总结

本文主要通过迁移学习为大家引入ResNet网络,为大家介绍了残差网络的两个核心结构:批次归一化与残差结构,通过这两个核心结构解决梯度消失、爆炸和退化问题。其中着重介绍了残差结构的类型与ResNet_18的网络模型与具体操作。这些核心特点使得ResNet网络能够训练得更深且性能更强,在计算机视觉和深度学习领域得到了广泛应用。

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

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

相关文章

书生大模型实战营学习[9] OpenCompass 评测 InternLM-1.8B 实践

准备工作 打开开发机,选择cuda11.7环境,A100选择10%,点击创建,然后进入开发机即可,和之前的操作一样。接下来创建环境,下载必要的依赖包 conda create -n opencompass python3.10 conda install pytorch2…

Altium Designer(AD)百度云下载与安装(附安装步骤)

在我们日常使用当中,Altium designer常常也被简称为AD,是一款一体化的电子产品开发系统软件,主要运行在Windows操作系统上。 我们通过Altium designer把原理图设计、电路仿真、PCB绘制编辑、拓扑逻辑自动布线、信号完整性分析和设计输出等技…

Eclipse Memory Analyzer (MAT)提示No java virtual machine was found ...解决办法

1,下载mat后安装,打开时提示 jdk版本低,需要升级到jdk17及以上版本,无奈就下载了jdk17,结果安装后提示没有jre环境,然后手动生成jre目录,命令如下: 进入jdk17目录:执行&…

鸿蒙界面开发(九):列表布局 (List)

列表布局 当列表项达到一定数量,内容超过屏幕大小时,可以自动提供滚动功能。它适合用于呈现同类数据类型或数据类型集,例如图片和文本。在列表中显示数据集合是许多应用程序中的常见要求(如通讯录、音乐列表、购物清单等&#xf…

Uniapp 微信小程序 最新 获取用户头像 和 昵称 方法 有效可用

文章目录 前言代码实现运行效果技术分析 前言 同事有个需求 授权获取用户头像 和 昵称 。之前做过线上小程序发版上线流程 就实现了下 最新的方法和 api 有些变化 记录下 代码实现 先直接上代码 <template><view class"container"><buttonclass&qu…

解决macOS安装redis以后不支持远程链接的问题

参考文档:https://blog.csdn.net/qq_37703224/article/details/142542179?spm1001.2014.3001.5501 安装的时候有个提示, 使用指定配置启动: /opt/homebrew/opt/redis/bin/redis-server /opt/homebrew/etc/redis.conf那么我们可以尝试修改这个配置文件: code /opt/homebrew/…

IDEA服务启动时无法输出日志

起服务时&#xff0c;控制台啥日志也没有 解决方案&#xff1a;选择【启用调试输出】 SQL的日志无法打印 原来安装了一个Mybatis Log Free&#xff0c;用的好好的。 后来换了个项目&#xff0c;SQL执行日志就打印不出来了。 解决方案&#xff1a;换个插件&#xff0c;我换了…

使用离火插件yoloV8数据标注,模型训练

1. 启动 2.相关配置 2.1 data.yaml path: D:/yolo-tool/yaunshen-yolov8/YOLOv8ys/YOLOv8-CUDA10.2/1/datasets/ceshi001 train: images val: images names: [蔡徐坤,篮球] 2.2 cfg.yaml # Ultralytics YOLOv8, GPL-3.0 license # Default training settings and hyp…

VS Code使用Git Bash终端

Git Bash可以运行linux命令&#xff0c;在VS Code的终端界面&#xff0c;找到号旁边的箭头&#xff0c;就能直接切换了 当然&#xff0c;前提是安装了Git Bash&#xff0c;并且在资源管理器里&#xff0c;能鼠标右键出"Git Bash Here"

C语言 | Leetcode C语言题解之第438题找到字符串中所有字母异位词

题目&#xff1a; 题解&#xff1a; /*** Note: The returned array must be malloced, assume caller calls free().*/ /* *int strCmpn&#xff1a;比较滑动窗口和字符串的相同值 char * s&#xff1a;字符串s&#xff0c;滑动窗口的位置 char * p&#xff1a;字符串p&#…

Python 课程21-Django

前言 在当今互联网时代&#xff0c;Web开发已成为一项必备技能。而Python作为一门简洁、高效的编程语言&#xff0c;其Web框架Django以其强大的功能和快速开发的特点&#xff0c;受到了广大开发者的青睐。如果你想深入学习Django&#xff0c;构建自己的Web应用&#xff0c;那么…

云中红队系列 | 使用 AWS API 配置Fireprox进行 IP轮换

在渗透测试评估期间&#xff0c;某些活动需要一定程度的自动化&#xff0c;例如从 LinkedIn 等网站抓取网页以收集可用于社会工程活动、密码喷洒登录门户或测试时盲注的有效员工姓名列表网络应用程序。但是&#xff0c;从单个源 IP 地址执行这些活动可能会导致在测试期间被拦截…

深度学习—神经网络基本概念

一&#xff0c;神经元 1.生物神经元与人工神经元 1.1神经元是人脑的基本结构和功能单位之一。人脑中有数1000亿个神经元&#xff0c;其功能是接受&#xff08;树突&#xff09;&#xff0c;整合&#xff08;细胞体&#xff09;&#xff0c;传导&#xff08;轴突&#xff09;和…

电脑usb接口封禁如何实现?5种禁用USB接口的方法分享!(第一种你GET了吗?)

“防患于未然&#xff0c;安全始于细节。”在信息技术飞速发展的今天&#xff0c;企业的信息安全问题日益凸显。 USB接口作为数据传输的重要通道&#xff0c;在带来便利的同时&#xff0c;也成为了数据泄露和安全风险的高发地。 因此&#xff0c;对电脑USB接口进行封闭管理&a…

【OceanBase 诊断调优】—— GC问题根因分析

GC 流程涉及到 RS 的状态切换和 LS 的资源安全回收&#xff0c;流程上较长。且 GC 线程每个租户仅有一个&#xff0c;某个日志流 GC Hang 死时会卡住所有其余日志流的 GC&#xff0c;进而造成更大的影响。 本文档会帮助大家快速定位到 GC 故障的模块&#xff0c;直达问题核心。…

Redis篇(环境搭建)

目录 一、安装包 1. Windows版下载地址 2. Linux版下载地址 二、安装Redis 1. 在Linux中安装Redis 2. 在Windows中安装Redis 3. 细节问题 三、Redis服务启动 1. 默认启动 2. 指定配置启动 3. 开机自启 四、Redis服务停止 1. Linux系统中启动和停止Redis 2. Window…

SLF4J报错log4j又报错

项目场景&#xff1a; 搭建一个spirngboot项目&#xff0c;启动运行时&#xff0c;SLF4J报错 解决后 ~ log4j又报错了。 问题描述 首先是SLF4J报错了&#xff0c;解决完SL4J报错问题后&#xff0c;再次启动项目&#xff0c;log4j又报错了 。。。 报错信息&#xff1a; SLF4J…

Go语言匿名字段使用与注意事项

1. 定义 Go语言支持一种特殊的字段只需要提供类型而不需要写字段名的字段&#xff0c;称之为匿名字段或者嵌套字段。 所谓匿名字段实际上是一种结构体嵌套的方式&#xff0c;所以也可以称作嵌套字段。 这种方式可以实现组合复用&#xff0c;即通过匿名字段&#xff0c;结构体…

说说海外云手机的自动化功能

在全球社交媒体营销中&#xff0c;通过自动化功能&#xff0c;企业不再需要耗费大量时间和精力手动监控和操作每台设备。这意味着&#xff0c;企业可以显著提升效率、节省成本&#xff0c;同时减少对人力资源的依赖。那么&#xff0c;海外云手机的自动化功能具体能带来哪些优势…

使用ucharts写的小程序页面柱状图上方没有数字

使用uCharts官网 - 秋云uCharts跨平台图表库写的柱状图如何让柱子上放没有数据 更改前 更改后 使用uCharts官网 - 秋云uCharts跨平台图表库 写的小程序图表&#xff0c;无论是柱状图还是折线图添加一个 dataLabel: false, // 不显示数据 九可以实现不显示数据 const opts …