pytorch针对模型的不同部分设置不同学习率

torch.optim中的优化器接收的待学习参数和学习率实际上都是字典型的数据。

因此,我们只需要将需要单独训练的模块和对应的学习率以字典形式传入即可。

例如:

此处,我们有模型model,其中包含part_1和part_2两个子模块,我们想要分别对其设置0.01与0.02的学习率,于是我们可以按照以下语法设置优化器

import torch.optim as optim
...
optimizer = optim.Adam([{'params': model.part_1.parameters(), 'lr': 0.01}, {'params': catp.part_2.parameters(), 'lr': 0.02}])
...
optimizer.step()
...

 

如果要锁定某模块,只训练该模块以外的参数。

例如:

此处,我们有模型model,其中包含了part_1,part_2和part_3三个子模块,我们想训练除了part_3以外的所有模块,于是我们可以按照以下语法设置

for param in model.part_3.parameters():
        param.requires_grad = False

optimizer.SGD(params=filter(lambda p: p.requires_grad, model.parameters()), lr=1e-5)

 

posted @ 2022-08-07 11:21  Real_Tourist  阅读(942)  评论(0)    收藏  举报