import numpy as np
[docs]class BaseScheduler(object):
def __init__(
self,
epoch_iters: int,
warmup_iters: int=0,
warmup_epochs: int=0,
min_lr: float=0,
noice_std: float=.0,
last_epoch: int=-1):
if (warmup_epochs > 0 and warmup_iters > 0):
raise ValueError("Cannot set 'warmup_iters' and 'warmup_epochs' at the same time!")
if warmup_epochs > 0:
self.warmup_iters = warmup_epochs * epoch_iters
else:
self.warmup_iters = warmup_iters
self.min_lr = min_lr
self.noice_std = noice_std
self.last_epoch = last_epoch
assert self.last_epoch >= -1
self.iter = (self.last_epoch + 1) * epoch_iters
assert self.iter >= 0
[docs] def step(self, n=1):
self.iter += n
lr = self.get_lr(self.iter)
if self.noice_std > 0:
lr = max(lr + np.random.normal(scale=self.noice_std * lr), self.min_lr)
return lr
[docs] def get_lr(self, iter):
raise NotImplementedError