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