Build optimizer, set weight decay of normalization to 0 by default.
(config, model)
| 11 | |
| 12 | |
| 13 | def build_optimizer(config, model): |
| 14 | """ |
| 15 | Build optimizer, set weight decay of normalization to 0 by default. |
| 16 | """ |
| 17 | skip = {} |
| 18 | skip_keywords = {} |
| 19 | if hasattr(model, 'no_weight_decay'): |
| 20 | skip = model.no_weight_decay() |
| 21 | if hasattr(model, 'no_weight_decay_keywords'): |
| 22 | skip_keywords = model.no_weight_decay_keywords() |
| 23 | parameters = set_weight_decay(model, skip, skip_keywords) |
| 24 | |
| 25 | # Modified for TinyViT |
| 26 | parameters = divide_param_groups_by_lr_scale(parameters) |
| 27 | |
| 28 | opt_lower = config.TRAIN.OPTIMIZER.NAME.lower() |
| 29 | optimizer = None |
| 30 | if opt_lower == 'sgd': |
| 31 | optimizer = optim.SGD(parameters, momentum=config.TRAIN.OPTIMIZER.MOMENTUM, nesterov=True, |
| 32 | lr=config.TRAIN.BASE_LR, weight_decay=config.TRAIN.WEIGHT_DECAY) |
| 33 | elif opt_lower == 'adamw': |
| 34 | optimizer = optim.AdamW(parameters, eps=config.TRAIN.OPTIMIZER.EPS, betas=config.TRAIN.OPTIMIZER.BETAS, |
| 35 | lr=config.TRAIN.BASE_LR, weight_decay=config.TRAIN.WEIGHT_DECAY) |
| 36 | |
| 37 | return optimizer |
| 38 | |
| 39 | |
| 40 | def set_weight_decay(model, skip_list=(), skip_keywords=()): |
no test coverage detected