深度之眼Pytorch框架训练营第四期——Pytorch中的模型微调(Finetune)

模型微调(Finetune)

1、迁移学习(transfer learning)&模型微调(Finetune)

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

在这里插入图片描述
模型微调:所谓的模型微调,其实就是模型的迁移学习,在深度学习中,通过不断的迭代,更新卷基层中的权值,这里的权值可以称之为 knowledge , 然后我们可以将这些 knowledge 进行迁移,主要目的是将这些 knowledge 运用到新的模型中,这样既可以减小由于数据量不足导致的过拟合现象,同时又能加快模型的训练速度

在这里插入图片描述
具体说来,对于卷积神经网络,我们可以把前面的卷基层,池化层看作是 feature extractor ,是一个非常有共性的部分,而后面的全连接层,可以称之为 classifier , 这一部分就需要针对不同的训练任务进行调整,尤其是最后一层需要根据任务进行相应的调整

  • 模型微调的步骤
  • 获取预训练模型参数
  • 加载模型(load_state_dict)
  • 修改输出层
  • 模型微调训练方法:
  • 固定预训练的参数(requires_grad =False;lr=0)
  • Features Extractor较小学习率(params_group)
2、PyTorch中的Finetune

通过Resnet-18进行模型的Finetune:

Resnet-18最后一个 f c fc fc层是一个有1000个神经元的层,而用于二分类

(1)直接训练

如果不采用Resnet-18模型进行Finetune,直接对二分类数据进行训练,得到的 L o s s Loss Loss曲线如下:

在这里插入图片描述

可以看出,损失值一直在0.6附近,并且得到的 A c c u r a c y Accuracy Accuracy只有70%

(2)迁移训练,但不冻结卷积层,固定学习率
path_pretrained_model = os.path.join(BASEDIR, "data/resnet18-5c106cde.pth")
state_dict_load = torch.load(path_pretrained_model)
resnet18_ft.load_state_dict(state_dict_load)

在这里插入图片描述

可以看出,损失值最后收敛到在0.2附近,并且在第二个 E p o c h Epoch Epoch A c c u r a c y Accuracy Accuracy就达到了90%

(3)迁移训练,冻结卷基层,固定学习率
for param in resnet18_ft.parameters():
    param.requires_grad = False

从上面的代码来看,所谓冻结卷积层,是直接把参数的梯度设置为False

在这里插入图片描述

可以看出,损失值最后收敛到在0.2附近,与不冻结卷积层的情况相似,并且在第二个 E p o c h Epoch Epoch A c c u r a c y Accuracy Accuracy也达到了90%

(4)迁移训练,不冻结卷基层,设置小学习率
fc_params_id = list(map(id, resnet18_ft.fc.parameters()))     # 返回的是parameters的 内存地址
base_params = filter(lambda p: id(p) not in fc_params_id, resnet18_ft.parameters())
optimizer = optim.SGD([
    {'params': base_params, 'lr': LR*0},   # 0
    {'params': resnet18_ft.fc.parameters(), 'lr': LR}], momentum=0.9)

在这里插入图片描述

可以看到这种方法得到的结果和冻结卷积层得到的结果相同

从上面的例子中可以看出迁移学习应用于深度学习的巨大优势

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值