Source code for vlkit.lrscheduler.base

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