pytorch | loss不收敛或者训练中梯度grad为None的问题
Rilkean heart:
不好意思,这一个月有点忙,现在才看到。我恰好也用过这种分别设置学习率的机制,你这个或许没有指定每个"params"的学习率是多少(我猜的),外层的lr=1e-3是默认的学习率,适用于这3个"params"之外的所有参数。下面是我的代码,我对3组参数分别设置了3个特殊的学习率。[code=python]
# Set different lr for params
# id: id() 函数返回对象的唯一标识符,标识符是一个整数。返回对象的内存地址。
shape_params = list(map(id, mlp.z_shape.parameters()))
scale_params = list(map(id, mlp.z_scale.parameters()))
pi_params = list(map(id, mlp.z_pi.parameters()))
params_id = shape_params + scale_params + pi_params
base_params = filter(lambda p: id(p) not in params_id, mlp.parameters())
params = [{'params': base_params}, # 如果对某个参数不指定学习率,就使用最外层的默认学习率
{'params': mlp.z_pi.parameters(), 'lr': opt.lr_for_pi},
{'params': mlp.z_shape.parameters(), 'lr': opt.learning_rate},
{'params': mlp.z_scale.parameters(), 'lr': opt.lr_for_scale}]
optimizer = torch.optim.AdamW(params, lr=opt.learning_rate,weight_decay=opt.weight_decay)
[/code]
|