pytorch使用(五)使用pytorch进行微调(fine-tuning)

pytorch使用:目录


pytorch使用(五)使用pytorch进行微调(fine-tuning)

在使用pytorch的时候,发现使用预训练的模型进行微调的时候有比较难的两步,一是如何加载需要的两部分模型

1. 定义网络并且加载网络参数
  • 首先定义自己模型并且加载预训练网络的模型和参数,定义自己模型的时候把想要用的层名字设置为和预训练模型一样的
  • 加载预训练模型中的参数到自己的模型
# load the pre-trained network
model_zero = C3D()
model_zero.load_state_dict(torch.load(paraPath))

model = ROI_C3D(classes=para['nClass'])#ROI_C3D is my net
model_dict = model.state_dict()

model_zero = {k: v for k, v in model_zero.state_dict().items() if k in model_dict}
model_dict.update(model_zero)
model.load_state_dict(model_dict)
2. 设置学习率

通常预训练层的学习率会低一些. 在下面这个例子中,在定义网络的时候,相比原来的模型,将最后一个全连接的名字改为了classifier

#set optimization method
ignored_params = list(map(id, model.classifier.parameters())) #layer need to be trained
base_params = filter(lambda p: id(p) not in ignored_params,model.parameters())
optimizer = optim.SGD([
    {'params': base_params},
    {'params': model.classifier.parameters(), 'lr': para['lr']*0.1}], 0.001, momentum=0.9, weight_decay=1e-4)

这样预训练的模型学习率是0.0001,而最后一个全连接是0.001

  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值