понимаю что it должна передаваться с вызовом lr_lambda.
Однако единственный вызов - это return lr_lambda и никакого параметра там нет. Откуда это it берётся?
def cyclical_lr(stepsize, min_lr=3e-4, max_lr=3e-3):
scaler = lambda x: 1.
lr_lambda = lambda it: min_lr + (max_lr - min_lr) * relative(it, stepsize)
def relative(it, stepsize):
cycle = math.floor(1 + it / (2 * stepsize))
x = abs(it / stepsize - 2 * cycle + 1)
return max(0, (1 - x)) * scaler(cycle)
return lr_lambda
lr_lambda это функция, она и возвращается, а не вызывается там куда она вернулась и будет происходить вызов с передачей аргумента it
Не понимаю. Вот так выглядит вызов: cyclical_lr(step_size, min_lr=startLR, max_lr=endLR) Тут же нет никакого it
еще раз cyclical_lr возвращает функцию lr_lambda пример: foo = cyclical_lr(step_size, min_lr=startLR, max_lr=endLR) print(foo(it))
Вот вызов: clr = cyclical_lr(step_size, min_lr=startLR, max_lr=endLR) Теперь clr - это лямбда функция. Далее идёт scheduler = torch.optim.lr_scheduler.LambdaLR(optimizer, [clr]) Получается эта лямбда функция передаётся параметром в другую функцию и уже уже там отрабатывает, т.е. it передаётся во внутренностях torch.optim.lr_scheduler.LambdaLR() ?
понял, спасибо!
Обсуждают сегодня