Pytorch: ищет функцию, которая позволяла бы мне вручную устанавливать скорость обучения для определенных интервалов c эпох - PullRequest
0 голосов
/ 28 апреля 2020

Например, установите lr = 0,01 для первых 100 эпох, lr = 0,001 для эпохи 101 до эпохи 1000, lr = 0,0005 для эпохи 1001-4000. В основном мой тарифный план обучения не позволяет ему затухать экспоненциально с фиксированным числом шагов. Я знаю, что это может быть достигнуто самоопределенными функциями, просто любопытно, есть ли уже разработанные функции для этого.

1 Ответ

2 голосов
/ 28 апреля 2020

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 является самым простым.

...