例如,为前100个历元设置lr=0.01,从历元101到历元1000设置lr=0.001,为历元1001-4000设置lr=0.0005。基本上,我的学习率计划是不让它以固定的步数呈指数衰减。我知道它可以通过自定义函数来实现,只是好奇是否有已经开发的函数可以做到这一点。
torch.optim.lr_scheduler.LambdaLR
就是您想要的。它返回初始学习率的multiplier
,因此您可以为任何给定的epoch指定任何值。例如:
def lr_lambda(epoch: int):
if 100 < epoch < 1000:
return 0.1
if 1000 < epoch 4000:
return 0.05
# Optimizer has lr set to 0.01
scheduler = LambdaLR(optimizer, lr_lambda=[lambda1, lambda2])
for epoch in range(100):
train(...)
validate(...)
optimizer.step()
scheduler.step()
在PyTorch中有一些常见的函数(如MultiStepLR
或ExponentialLR
(,但对于自定义用例(如您的用例(,LambdaLR
是最简单的。