迁移学习--预训练微调

news2024/11/17 14:30:03

目录

1、迁移学习作用

2、迁移学习的途径

3、相关的领域

4、在计算机视觉中的应用

5、迁移学习的办法 

预训练模型 

微调

6、总结


1、迁移学习作用

定义:能在一个任务学习一个模型,然后用来解决相关的别的任务,这样我们在一个地方花的时间,学习的一些知识,研究的一些看法可以在另外一个地方被使用到;

迁移学习实在深度学习出圈的,因为在深度学习中需要训练很多的深层神经网络,需要很多的数据,代价也很高。

2、迁移学习的途径

  • 做好一个模型,将其做成一个特征提取的模块
  1. Word2Vec,在文本上训练一个单层神经网络,在训练好之后,每一个词对应一个特征,然后用这个特征去做别的任务;
  2. Resnet,对图片进行提取特征,然后,用这个特征作为另一个模型的输入,这样假设效果非常好,这样就可以代替人工去提取特征的步骤;
  3. I3D用来对视频提取特征。

  • 在一个相关的任务上训练一个模型,然后,在另一个任务上直接使用
  • 训练好一个模型,然后,在一个新的任务上对其做微调,使模型能更好的适应新的任务

3、相关的领域

  • 半监督学习:利用没有标号的数据,让有标号的数据变得好
  • 在极端的条件下,可以做zero-shot(一个任务有很多的类别但不会告诉你样本)或few-shot learning(一个任务就给你一些样本)
  • Multi-task learning(多任务学习):每一个任务都有它自己的数据,但是数据不是很够,可是任务之间相关,那么可以将所有的数据放在一起,然后同时训练多个任务出来,这样我们洗网能从别的任务之中获益

4、在计算机视觉中的应用

  • 在CV中存在了很多大规模标好的数据集(特别是分类问题,因为标号容易);
  • 在CV的迁移学习,我们是希望存在很多数据的一些应用上比较好的模型,能将它的知识拓展到我们自己的任务上去;
  • 通常你自己任务的数据集会比大数据集(ImageNet)要小很多(一开始不会花太多钱去标注很多的数据,正常是标好了一些看看模型效果怎么样,然后好的话再继续投入进去,这样是一个迭代的过程),然后我们想要快速的迭代,看看能不能用比较大的数据集来将一些学到的东西迁移到我们自己的任务上面去

5、迁移学习的办法 

预训练模型 

 作用:可以将 神经网络分成两块,一块编码器(特征提取器,将原始图片的原始像素转化在一个语义空间汇总可以线性可分的一些特征(浅表示或语义也正表示)),一块解码器(简单的线性分类器,将编码器的表示映射成想要的标号,或者做一些决策);

定义:预训练模型(Pre-train):在一个比较大的数据上训练好的一个模型,会具有一定的泛化能力(放到新模型上或新的数据集上,这个模型还是有效果的)【虽然是用于图片分类但是也可以试试目标检测】

微调

  • 将预训练好的模型用在新任务上叫fine-tuning(微调)【通常在深度学习里面,微调能带来最好的效果,但是也有一定的开销】
  • 微调是怎么做的:在新的任务上构建一个新的模型,新的模型的架构要更预训练的模型的架构是一样的;在找到合适的预训练模型之后要初始化我们的模型(将预训练模型的除了最后一层之外(特征提取器)的权重都复制给我们的模型,最后一层的解码器用的还是随机的权重【因为我们的标号和预训练模型的标号是不一样的】);
  • 具体看例子:在初始化之后,就可以开始学习了,这步跟我们平常的学习没有什么不同的;有一点点小做法是,限制fine-tune后的学习率。因为我们初始的结果已经比较好了,已经在想要解的附近了,限制学习率可以使得我们可以不会走太远【一般是用1e-3】;另外是说不要训练太长的时间;这些做法都是为了缩小搜索空间;限制搜索空间的原因:

========================================================================= 

限制搜索空间的其他方法——固定最底层

  • 神经网络通常有一个层次化的,最底层一般是学习了底层的特征,上层的更与语义相关,所以一般来说底层与上面层没有太多的关系,在换了数据集之后泛化性都很好;
  • 最后一层还是随机初始化学习,然后只对某一些层进行改动,最下面那些层在微调时就不去动了(可以说是学习率为0);
  • 固定住多少层是要根据应用来看的,假设应用与预训练模型差别比较大的话,可以多训练一些层;

========================================================================= 

怎么去找微调模型



  • 首先要去找有没有我们想要的预训练模型,然后是看它是在什么样的数据集上训练好的;
  • 可以去的途径(ModelHub、ModelZoom之类的):
  • Tensorflow Hub: https://tfhub.dev/;(允许用户去提交模型)
  • TIMM(把pytorch上能找到的各种代码实现弄过来): https://github.com/rwightman/pytorch-image-models;(ross 自己维护的一个包【文档不错,模型性能暂时一般般】)
  • TIMM使用代码介绍:

========================================================================= 

fine-tuning的一些应用

  • 在大的数据集上训练好模型再微调到自己的应用上在CV领域上广泛的应用;
  • 新的任务包含 目标检测、语义分割等(图片类似但是目标不一样);
  • 在医疗领域等(同样的任务但是图片大相径庭);
  • 现在的观点是微调加速了收敛(微调让初始的点不再试一个随机的点而是一个离最终的目标比较近的点,使得损失比较平滑),但是不一定可以提升精度(一般不会让精度变低,因为它只是改变初始值而已,跟随机初始化没区别,只要走的足够远也能摆脱初始值的影响);

6、总结

  • 通常我们会在大数据上训练预训练好的模型,这种任务通常是图片分类;
  • 然后在关心的任务上把模型的权重初始化成预训练好的模型的权重,当然最后一层也就是解码器是要随机初始化的;
  • 微调一般用一个小一点的学习率进行细微的调整,这样通常会加速收敛,有时可以提升精度但通常不会变差;(所以通常在CV中是经常被推荐的做法)

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

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

相关文章

鸿运主动安全云平台任意文件下载漏洞

一、漏洞描述 深圳市强鸿电子有限公司鸿运主动安全云平台存在任意文件下载漏洞,攻击者可通过此漏洞下载敏感文件信息,获取数据库账号密码,从而为下一步攻击做准备。 二、网络空间搜索引擎查询 fofa查询 body"./open/webApi.html"…

排序算法-插入排序法(InsertSort)

排序算法-插入排序法(InsertSort) 1、说明 插入排序法是将数组中的元素逐一与已排序好的数据进行比较,先将前两个元素排序好,再将第三个元素插入适当的位置,也就是说这三个元素仍然是已排序好的,接着将第…

bootz启动 Linux内核过程总结

一. bootz启动Linux uboot 启动 Linux内核使用bootz命令。当然还有其它的启动命令,例如,bootm命令等等。 前面几篇文章分析 bootz命令启动 Linux内核的过程中涉及的几个重要函数。 bootz启动 Linux内核过程中涉及的全局变量images_凌肖战的博客-CSDN博…

3d tiles规范boundingVolume属性学习

3d tiles的瓦片(Tiles)包含一些属性,其中第一项是boundingVolume;下面学习boundingVolume; boundingVolume,这个翻译为边界范围框,如果直译为边界体积可能有问题,其实就是包围盒的意…

Matlab提取colormap

文章目录 简介Matlab代码 简介 使用Maltab依据截取的图片信息,提取colormap,供保存使用 Matlab代码 提取函数 function colormap_outExtract_Colormap(inputfig, colormapsize)% Creat a colormap array from the input figure. % The figure is a c…

虹科科技 | 探索CAN通信世界:PCAN-Explorer 6软件的功能与应用

CAN(Controller Area Network)总线是一种广泛应用于汽车和工业领域的通信协议,用于实时数据传输和设备之间的通信。而虹科的PCAN-Explorer 6软件是一款功能强大的CAN总线分析工具,为开发人员提供了丰富的功能和灵活性。本文将重点…

刷题用到的非常有用的函数c++(持续更新)

阅读导航 字符串处理类一、stoi()(将字符串转换为整数类型)二、to_string()(将整数类型转换为字符串类型)三、stringstream函数(将一个字符串按照指定的分隔符进行分词) 字符串处理类 一、stoi()&#xff…

ChatGPT AIGC 高效办公自动化案例

根据业务员姓名查找对应月份的科目成绩。 我们让ChatGPT AIGC来完成Excel公式。 Prompt:有一个表格A列为姓名,B列为语文,C列为数学,请根据J2单元格的姓名 ,查找出对应的数学成绩,请写出函数来完成 将生成的vlookup函数公式=VLOOKUP(J2, A:C, 3, FALSE)复制到表格中进行验…

[开源]基于流程编排的自动化测试工具,插件驱动,测试无限可能

一、开源项目简介 流程编排,插件驱动,测试无限可能 一款基于流程编排的自动化测试工具 二、开源协议 使用Apache-2.0开源协议 三、界面展示 四、功能概述 在软件开发旅程中,测试流程的管理和执行常常是复杂且耗时的挑战。传统测试工具主…

c++ 类的特殊成员函数:移动构造函数(五)

1. 简介 移动构造函数是C11中的新特性,它允许对象通过移动而不是复制来传递和初始化。移动构造函数通常用于提高性能,因为它避免了不必要的复制操作,特别是当处理大型对象或使用动态内存分配时。 2. 来源 当拷贝构造函数出现函数返回值 &a…

kafka广播消费组停机后未删除优化

背景 kafka广播消息的时候为了保证groupId不重复,再创建的时间采用前缀时间戳的形式,这样可以保证每次启动的时候是创建的新的,但是 会出现一个问题:就是每次停机或者重启都会新建一个应用实例,关闭应用后并不会删除…

如何调整 Kubernetes StatefulSet 卷的大小

Kubernetes StatefulSet用于在集群内部署有状态应用程序。StatefulSet 中的每个 Pod 都可以访问即使在重新调度后仍坚持使用的本地持久卷。这使得 Pod 能够维护与其集合中的邻居不同的单独状态。 不幸的是,这些卷有一个很大的限制:Kubernetes 没有提供从 StatefulSet 对象调整…

排序算法-冒泡排序法(BubbleSort)

排序算法-冒泡排序法(BubbleSort) 1、说明 冒泡排序法又称为交换排序法,是从观察水中的气泡变化构思而成的,原理是从第一个元素开始,比较相邻元素的大小,若大小顺序有误,则对调后再进行下一个…

排序算法-选择排序法(SelectionSort)

排序算法-选择排序法(SelectionSort) 1、说明 选择排序法也是枚举法的应用,就是反复从未排序的数列中取出最小的元素,加入另一个数列中,最后的结果即为已排序的数列。选择排序法可使用两种方式排序,即在所…

基于nodejs+vue驾校预约管理系统

通过科技手段提高自身的优势;对于驾校预约管理系统当然也不能排除在外,随着网络技术的不断成熟,带动了驾校预约管理系统, 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,驾校预约管理系统&am…

【Rust】包和模块,文档注释,Rust格式化输出

文章目录 包和模块包 CrateRust 的标准目录结构 模块 Module用路径引用模块使用super引用模块使用self引用模块结构体和枚举的可见性 使用 use 引入模块及受限可见性基本引入方式绝对路径引入模块相对路径引入模块中的函数 避免同名引用 注释和文档文档注释包和模块级别的注释注…

conda: error: argument COMMAND: invalid choice: ‘activate‘

参考:https://github.com/conda/conda/issues/13022 输入后重启terminal即可

Spring Boot 开发环境热部署

Spring Boot 项目无法像前端项目那样,修改源代码后刷新网页就能即时看到效果,需要先暂停运行,再重新启动,最后刷新网页。 为了避免这一麻烦的操作,我们可以设置热部署,启动服务后不论怎么修改源码&#xf…

NodeJs中使用JSONP和Cors实现跨域

跨域是为了解决浏览器请求域名,协议,端口不同的接口,相同的接口是不需要实现跨域的。 1.使用JSONP格式实现跨域 实现步骤 动态创建一个script标签 src指向接口的地址 定义一个函数和后端调用的函数名一样 实现代码 -- 在nodejs中使用http内…

【Mysql】重新认识mysql(一)

参考Mysql是怎么运行的,并结合实际的工作经验对mysql的知识进行总结。 Mysql架构 从大体上来说,Mysql是C/S架构。以我们平时使用的QQ为例,它其实是由两部分组成的,一部分是客户端程序,,一部分是服务器程序。客户端可…