return optimizer (name) in torch.optim. If bn_wd_skip, the optimizer does not apply weight decay regularization on parameters in batch normalization.
(net, optim_name='SGD', lr=0.1, momentum=0.9, weight_decay=0, nesterov=True, bn_wd_skip=True)
| 196 | |
| 197 | |
| 198 | def get_optimizer(net, optim_name='SGD', lr=0.1, momentum=0.9, weight_decay=0, nesterov=True, bn_wd_skip=True): |
| 199 | ''' |
| 200 | return optimizer (name) in torch.optim. |
| 201 | If bn_wd_skip, the optimizer does not apply |
| 202 | weight decay regularization on parameters in batch normalization. |
| 203 | ''' |
| 204 | |
| 205 | decay = [] |
| 206 | no_decay = [] |
| 207 | for name, param in net.named_parameters(): |
| 208 | if ('bn' in name or 'bias' in name) and bn_wd_skip: |
| 209 | no_decay.append(param) |
| 210 | else: |
| 211 | decay.append(param) |
| 212 | |
| 213 | per_param_args = [{'params': decay}, |
| 214 | {'params': no_decay, 'weight_decay': 0.0}] |
| 215 | |
| 216 | if optim_name == 'SGD': |
| 217 | optimizer = torch.optim.SGD(per_param_args, lr=lr, momentum=momentum, weight_decay=weight_decay, |
| 218 | nesterov=nesterov) |
| 219 | elif optim_name == 'AdamW': |
| 220 | optimizer = torch.optim.AdamW(per_param_args, lr=lr, weight_decay=weight_decay) |
| 221 | return optimizer |
| 222 | |
| 223 | |
| 224 | def get_cosine_schedule_with_warmup(optimizer, |
no outgoing calls
no test coverage detected