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 самый простой.

Другие вопросы по тегам