【pytorch】固定模型部分权重进行训练

前言

在深度学习领域,经常需要使用其他人已训练好的模型进行改进或微调,这个时候我们会加载已有的预训练模型文件的参数,如果网络结构不变,希望使用新数据微调部分网络参数。这时我们则需要冻结部分参数,禁止其更新。

做法

做法非常简单。

参考这篇博客:https://blog.csdn.net/HUSTHY/article/details/104006106

其实只需要设置model的parameter的requires_grad=False,如下下面:

    for name, param in model.named_parameters():    #遍历模型的所有层
        if param.requires_grad:
            print(name)
            print(param)
            	if name=='backbone.layers.11.ffn.layers.0.0.bias':
                	param.requires_grad = False     #固定该层参数

对优化器的设置

有些文章说需要设置optimizer,让optimizer不去传播这模型,比如参考博客中提到的:

#只对p中requires_grad=True代码进行训练,加过滤器filter把requires_grad = False的参数过滤掉,在训练的时候,不会更新这些参数
optimizer = torch.optim.Adam(filter(lambda p: p.requires_grad, model.parameters()), lr=0.00001)

我发现在后面较高的pytorch(>1.8)版本上不需要这样,只需要正常设置optimizer即可:

optimizer = torch.optim.Adam(model.parameters()), lr=0.00001)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值