PyTorch weight decay(转)

torch.optim 中实现了很多优化器,只需要指定优化器的权重衰减即可:

1
optimizer = optim.SGD(model.parameters(), lr = 0.01, momentum=0.9,weight_decay=1e-5)

优化器同时还支持per-parameter options操作,就是对每一个参数进行特定的制定,以满足更为细致的要求。此时,传入优化器的是可迭代的字典,字典中必须有params的key,用于指定特定优化变量,而其他key需要匹配优化器本身的设置。

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

可以灵活给每个子模块设置不同的学习率,权值衰减和momentum。也可以给权值设定权值衰减,而不作用于偏置:

1
2
3
4
5
6
7
8
9
10
11
12
weight_p, bias_p = [],[]
for name, p in model.named_parameters():
if 'bias' in name:
bias_p += [p]
else:
weight_p += [p]
# 这里的model中每个参数的名字都是系统自动命名的,只要是权值都是带有weight,偏置都带有bias,

optim.SGD([
{'params': weight_p, 'weight_decay':1e-5},
{'params': bias_p, 'weight_decay':0}
], lr=1e-2, momentum=0.9)

Reference

https://blog.csdn.net/LoseInVain/article/details/81708474