torch.optim.lr_scheduler.LambdaLR
- это то, что вы ищете. Он возвращает 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
является самым простым.