Pytorch学习率相关问题及L2 Penalty
Posted PyTorch与深度学习
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pytorch学习率相关问题及L2 Penalty相关的知识,希望对你有一定的参考价值。
1.Pytorch对于不同层设置不同的学习率
optim.SGD([
{'params': model.base.parameters()},
{'params': model.classifier.parameters(), 'lr': 1e-3}
], lr=1e-2, momentum=0.9)
model.base.parameters()
将使用1e-2的学习率,model.classifier.parameters()
将使用1e-3的学习率,0.9的momentum作用于所有的parameters。
2.甚至可以对于同一层的weight和bias设置不同的lr
import torch
import torch.nn as nn
import torch.optim as optim
from torch.autograd import Variable
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.layer = nn.Linear(1, 1)
def forward(self, x):
return self.layer(x)
if __name__=="__main__":
net = Net()
optimizer = optim.Adam([
{'params': net.layer.weight},
{'params': net.layer.bias, 'lr': 0.0001}
], lr=0.01, weight_decay=0.0001)
out = net(Variable(torch.Tensor(1)))
out.backward()
optimizer.step()
3.训练过程中学习率的调节
torch.optim.lr_scheduler
中提供了多种方法,如
LambdaLR
StepLR
MultiStepLR
ExponentialLR
举个官网给的例子
>>> # Assuming optimizer uses lr = 0.05 for all groups
>>> # lr = 0.05 if epoch < 30
>>> # lr = 0.005 if 30 <= epoch < 80
>>> # lr = 0.0005 if epoch >= 80
>>> scheduler = MultiStepLR(optimizer, milestones=[30,80], gamma=0.1)
>>> for epoch in range(100):
>>> scheduler.step()
>>> train(...)
>>> validate(...)
4.对参数加 L2 penalty
Pytorch中的Adam,RMSprop,SGD等都有一个weight_decay的参数,默认为0,如果不为0,对参数会施加L2 penalty。
optimizer=torch.optim.Adam(model.parameters(),lr=1e-4,weight_decay=1e-5)
以上是关于Pytorch学习率相关问题及L2 Penalty的主要内容,如果未能解决你的问题,请参考以下文章
Pytorch 模型 查看网络参数的梯度以及参数更新是否正确,优化器学习率的分层设置
pytorch常用优化器总结(包括warmup介绍及代码实现)
pytorch常用优化器总结(包括warmup介绍及代码实现)