pytorch框架学习(18)——finetune

1. Transfer Learning & Model Finetune

  • Transfer Learning:机器学习分支,研究源域(source domain)的知识如何应用到目标域(target domain)

  • Model Finetune:模型的迁移学习
    在这里插入图片描述
    我们一般可以将一个卷积神经网络分为两部分,一般将前面的一些列卷积池化操作定义为features extractor,通过这些卷积池化操作得到feature map,我们就认为这些feature maps就是他的特征,这些feature maps 最后会与一些列的全连接层(FC层),而这些全连接层可以看做classifier部分,因此将一个卷积神经网络分为特征提取部分和分类器部分。

我们认为特征提取的部分是具有共性的部分,可以原封不动的进行迁移,而分类器的参数与具体的分类任务有关,通常我们需要进行改变,特别注意的地方是,我们一般都要改变最后一个输出层

2. Pytorch中的Finetune

  • 模型微调步骤:

    1. 获取与训练模型参数(原任务中学习到的知识)
    2. 加载模型(load_state_dict)
    3. 修改输出层
  • 模型微调训练方法:

  1. 固定预训练的参数(requires_grad = False; lr=0)
for param in resnet18_ft.parameters():
    param.requires_grad = False
  1. Features Extractor设置较小的学习率,而classifer的学习率可以比较大(可以通过params_group方法对不同部分设置不同的学习率)
fc_params_id = list(map(id, resnet18_ft.fc.parameters()))     # 返回的是parameters的 内存地址
"""将网络层中的参数分为fc层参数和features extractor部分参数,通过filter函数实现"""
base_params = filter(lambda p: id(p) not in fc_params_id, resnet18_ft.parameters())
optimizer = optim.SGD([
    {'params': base_params, 'lr': LR*0.1},   # 如果将LR设置为0,则不改变模型参数
    {'params': resnet18_ft.fc.parameters(), 'lr': LR}], momentum=0.9)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aidanmomo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值