迁移学习及模型参数冻结

迁移学习基础入门篇

前言

面试的时候被问了一个问题,当时没想出来。看完这个,才知道,哦,原来。。。
问题是:什么时候需要把叶子节点固定住?
我们带着这个问题去看迁移学习。

模型迁移学习

迁移学习一个最大的作用,就是节省训练时间,因为一些大的网络训练是很费功夫的,而别人已经训练好,使得它能提取多种类别的信息了。所以只需要再进行微调学习就能得到小样本任务的训练网络。
一般而言模型的微调任务步骤如下:
1.获取预训练模型参数
2.加载模型(load.state dict)
3.修改输出层

训练方法:
1.固定预训练参数(request.grad=False;lr = 0)

是不是有种似曾相似的感觉,没错,前言里面的那个问题,在这就是答案

2.Features Extractor较小学习率( params group )

因为我不是太会在paddle里用动态图去加载预训练模型,这里就放一个别人用pytorch实现的代码 学习笔记|Pytorch使用教程28(模型finetune)

迁移学习是一种机器学习策略,通常用于处理新任务时利用预训练模型的知识。当你想在一个新任务上应用一个已经在大型数据集上训练过的模型,但又不想从头开始训练所有的参数,就可以采用冻结底层参数的方式。 冻结底层参数意味着,在训练过程中,将模型的前几层(通常是卷积神经网络中的卷积层或预训练语言模型中的嵌入层)固定不变,只对顶部的分类层或其他特定的新添加层进行微调。这样做可以保留原始模型学到的基础特征表示,而仅调整针对新任务所需要的少量权重,以避免过度拟合和加快训练速度。 以下是冻结底层参数的一般步骤: 1. **加载预训练模型**:首先加载已经训练好的模型。 2. **选择要冻结的部分**:确定哪些层应该保持不动,通常包括那些被认为已学到通用特征的低层次结构。 3. **设置层的不可训练状态**:通过`.trainable = False` 或 `layer.trainable = False` 将选定层的训练标志设为False。 4. **初始化新添加层**:如果需要添加新的全连接层或任务相关的层,初始化它们。 5. **开始微调**:在新数据集上进行训练,仅更新新添加层以及可能的一些中间层(取决于实际需求)。 6. **解冻部分层进行进一步训练**:如果发现模型性能不佳,可以选择逐步解冻一些底层层,并允许它们稍微调整以适应新任务。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值