Pytorch之finetune使⽤详解
finetune分为全局finetune和局部finetune。⾸先介绍⼀下局部finetune步骤:
1.固定参数
for name, child in model.named_children():
for param in child.parameters():
后,只传⼊需要反传的参数,否则会报错
filter(lambda param: quires_grad, model.parameters())
2.调低学习率,加快衰减
finetune是在预训练模型上进⾏微调,学习速率不能太⼤。
⽬前不清楚:学习速率降低的幅度可以更快⼀些。这样以来,在使⽤step的策略时,stepsize可以更⼩⼀些。
直接从原始数据训练的base_lr⼀般为0.01,微调要⽐0.01⼩,置为0.001
django怎么学要⽐直接训练的⼩⼀些,直接训练的stepsize为100000,finetune的stepsize: 50000
3. 固定bn或取消dropout:
batchnorm会影响训练的效果,随着每个batch,追踪样本的均值和⽅差。对于固定的⽹络,bn应该使⽤全局的数值
def freeze_bn(self):
for layer dules():
if isinstance(layer, nn.BatchNorm2d):
layer.eval()
训练时,ain()会修改模式,freeze_zn()应该在这⾥后⾯
4.过滤参数
训练时,对于优化器,应该只传⼊需要改变的参数,否则会报错
filter(lambda p: p.requires_grad, model.parameters())
以上这篇Pytorch之finetune使⽤详解就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。