PyTorch 分层设置学习率

Intro

在进行迁移学习或是对现有模型结构进行改进(改动? :smiling_imp:),有时候需要设置部分层的学习率及其他优化超参数与其他层不同.PyTorch在优化器的方法中提供了此类操作.

optim构造

PyTorch在optim的说明中给出了这样一个示例[Per-parameter options]:

1
2
3
4
optim.SGD([
{'params': model.base.parameters()},
{'params': model.classifier.parameters(), 'lr': 1e-3}
], lr=1e-2, momentum=0.9)

参数分组

通过按层的名称过滤的方法,将参数分为若干组.示例代码如下:

1
2
3
4
5
6
7
8
9
10
all_parameters = model.parameters()

lin1_parameters = []
for pname, p in model.named_parameters():
if pname.find('linear1') >= 0:
lin1_parameters.append(p)

lin1_parameters_id = list(map(id, lin1_parameters))
other_parameters = list(filter(lambda p: id(p) not in lin1_parameters_id,
all_parameters))

The Code

见参考[2]

参考

[1] PyTorch参数初始化和Finetune
[2] pytorch 分层设置学习率