Pytorch再一个优化器中为不同的参数设置不同的学习率

由于使用到BERT预训练模型,在对BERT进行微调时,需要较小学习率。而模型正常的学习率相对较大,如果使用同学习率,可能效果较差,所以为BERT单独设置一个学习率,方法如下:

# 核心思想: 将BERT部分参数与其他参数分开管理
bert_params = []
other_params = []

for name, para in model.named_parameters():
	# 对于需要更新的参数:
    if para.requires_grad:
    	# BERT部分所有参数都存在于bert_encoder中(针对不同模型,可以print(name)输出查看)
        if "bert_encoder" in name:
            bert_params += [para]
        else:
            other_params += [para]

params = [
    {"params": bert_params, "lr": args.bert_lr},
    {"params": other_params, "lr": args.lr},
    ]
optimizer = optim.Adam(params, weight_decay=args.l2_penalty)

你可能感兴趣的:(神经网络)