Pytorch: ищу функцию, которая позволяет мне вручную устанавливать скорость обучения для определенных интервалов эпох
Например, установите lr = 0,01 для первых 100 эпох, lr = 0,001 от эпохи 101 до эпохи 1000, lr = 0,0005 для эпох 1001-4000. По сути, мой тарифный план обучения не позволяет ему экспоненциально распадаться при фиксированном количестве шагов. Я знаю, что это может быть достигнуто с помощью самоопределяемых функций, просто любопытно, есть ли уже разработанные функции для этого.
1 ответ
Решение
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
самый простой.