PyTorch冻结部分层

需求:PyTorch中,固定某些层,只更新部分层的参数
方法:

1
2
3
4
5
for param in model.parameters():
param.requires_grad = False
for param in model.classifier_parameters():
param.requires_grad = True
optimizer = torch.optim.Adam(model.classifier_parameters(), lr=args.lr, weight_decay=1e-4)

注意:若是不设置param.requires_grad = False,直接在optimizer设置需要更新的参数,网络还是会计算所有参数的梯度,只是不更新网络的权重。设置param.requires_grad = False可以加快网络的运算速度,在将不需要更新参数的梯度设为False之后,在optimizer里面填写的是整个模型的参数或是仅有需要更新部分的参数。