Pytorch:寻找一个让我手动设置特定时期间隔的学习率的功能
Pytorch: looking for a function that let me to manually set learning rates for specific epochs intervals
例如,为前 100 个纪元设置 lr = 0.01,从纪元 101 到纪元 1000 设置 lr = 0.001,对于纪元 1001-4000 设置 lr = 0.0005。基本上我的学习率计划不会让它以固定的步数呈指数衰减。我知道它可以通过自定义函数来实现,只是好奇是否已经开发了函数来做到这一点。
torch.optim.lr_scheduler.LambdaLR
就是您要找的。它 returns multiplier
初始学习率,因此您可以为任何给定的时期指定任何值。对于您的示例,它将是:
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
是最简单的。
例如,为前 100 个纪元设置 lr = 0.01,从纪元 101 到纪元 1000 设置 lr = 0.001,对于纪元 1001-4000 设置 lr = 0.0005。基本上我的学习率计划不会让它以固定的步数呈指数衰减。我知道它可以通过自定义函数来实现,只是好奇是否已经开发了函数来做到这一点。
torch.optim.lr_scheduler.LambdaLR
就是您要找的。它 returns multiplier
初始学习率,因此您可以为任何给定的时期指定任何值。对于您的示例,它将是:
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
是最简单的。