[迁移学习]预训练和微调

这篇具有很好参考价值的文章主要介绍了[迁移学习]预训练和微调。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、概述

        一般的有监督迁移学习分为以下三种:

                ①将训练好的模型作为特征抽取模块(例如以resnet进行特征提取)

                ②在一个相关的任务中训练后直接后直接使用(例如gpt)

                ③在训练好的模型基础上进行微调

        此外还有无监督学习的方式

                zero-shot:没有任何标签信息

                few-shot:仅能获取少量标签信息

二、微调

        一般来说,神经网络可以分为两个部分:编码器(Encoder)和解码器(Decoder)。编码器的作用是将原始的像素转换为语义空间中线性可分的语义特征(特征嵌入);解码器的作用是将编码器的语义特征映射为标号(线性分类器)。

[迁移学习]预训练和微调

         预训练模型(Pre-trained model):在一个较大的数据集上训练的模型(如ImageNet),该模型一般拥有较好的泛化能力。作为对比,一般从零开始训练神经网络,网络中的参数都是随机初始化,很难调优。

        具体做法如下:

                ①构建一个新的模型,该模型的架构应该与预训练模型一致

                ②新模型初始化时,编码器(Encoder)直接加载预训练模型中的权重,解码器(Decoder)使用随机初始化。

[迁移学习]预训练和微调

                 ③-1限制搜索空间:控制训练轮次和学习率(因为预训练模型本身就在最优解附近,需要避免偏移过多)

                ③-2冻结底层:底层网络一般学习到一些局部特征,而越往上层学习到的东西越是全面。具体做法是将下面几层进行冻结(学习率置0)

三、预训练模型的获取

        以Pytorch为例,可以在访问此网站:Pytorch预训练模型,同时模型转换可以参考之前的文章

[PyTorch]预训练权重的转换https://blog.csdn.net/weixin_37878740/article/details/130259766        或者直接调用timm文章来源地址https://www.toymoban.com/news/detail-482763.html

import timm
from torch import nn

model = timm,create_model('resnet50',pretrained=True)
model.fc = nn.Linear(model.fc.in_features,n_classes)

到了这里,关于[迁移学习]预训练和微调的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包