| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- # Build warmup scheduler
- def build_warmup(cfg, base_lr=0.01, wp_iter=500):
- print('==============================')
- print('WarmUpScheduler: {}'.format(cfg['warmup']))
- print('--base_lr: {}'.format(base_lr))
- print('--warmup_factor: {}'.format(cfg['warmup_factor']))
- print('--wp_iter: {}'.format(wp_iter))
- warmup_scheduler = WarmUpScheduler(name=cfg['warmup'],
- base_lr=base_lr,
- wp_iter=wp_iter,
- warmup_factor=cfg['warmup_factor'])
-
- return warmup_scheduler
-
- # Basic Warmup Scheduler
- class WarmUpScheduler(object):
- def __init__(self,
- name='linear',
- base_lr=0.01,
- wp_iter=500,
- warmup_factor=0.00066667):
- self.name = name
- self.base_lr = base_lr
- self.wp_iter = wp_iter
- self.warmup_factor = warmup_factor
- def set_lr(self, optimizer, lr):
- for param_group in optimizer.param_groups:
- param_group['lr'] = lr
- def warmup(self, iter, optimizer):
- # warmup
- assert iter < self.wp_iter
- if self.name == 'exp':
- tmp_lr = self.base_lr * pow(iter / self.wp_iter, 4)
- self.set_lr(optimizer, tmp_lr)
- elif self.name == 'linear':
- alpha = iter / self.wp_iter
- warmup_factor = self.warmup_factor * (1 - alpha) + alpha
- tmp_lr = self.base_lr * warmup_factor
- self.set_lr(optimizer, tmp_lr)
- def __call__(self, iter, optimizer):
- self.warmup(iter, optimizer)
-
|