Build multiple optimizers from configs. If `cfgs` contains several dicts for optimizers, then a dict for each constructed optimizers will be returned. If `cfgs` only contains one optimizer config, the constructed optimizer itself will be returned. For example, 1) Multiple optimizer
(model, cfgs)
| 6 | |
| 7 | |
| 8 | def build_optimizers(model, cfgs): |
| 9 | """Build multiple optimizers from configs. If `cfgs` contains several dicts |
| 10 | for optimizers, then a dict for each constructed optimizers will be |
| 11 | returned. If `cfgs` only contains one optimizer config, the constructed |
| 12 | optimizer itself will be returned. For example, |
| 13 | |
| 14 | 1) Multiple optimizer configs: |
| 15 | |
| 16 | .. code-block:: python |
| 17 | |
| 18 | optimizer_cfg = dict( |
| 19 | model1=dict(type='SGD', lr=lr), |
| 20 | model2=dict(type='SGD', lr=lr)) |
| 21 | |
| 22 | The return dict is |
| 23 | ``dict('model1': torch.optim.Optimizer, 'model2': torch.optim.Optimizer)`` |
| 24 | |
| 25 | 2) Single optimizer config: |
| 26 | |
| 27 | .. code-block:: python |
| 28 | |
| 29 | optimizer_cfg = dict(type='SGD', lr=lr) |
| 30 | |
| 31 | The return is ``torch.optim.Optimizer``. |
| 32 | |
| 33 | Args: |
| 34 | model (:obj:`nn.Module`): The model with parameters to be optimized. |
| 35 | cfgs (dict): The config dict of the optimizer. |
| 36 | |
| 37 | Returns: |
| 38 | dict[:obj:`torch.optim.Optimizer`] | :obj:`torch.optim.Optimizer`: |
| 39 | The initialized optimizers. |
| 40 | """ |
| 41 | optimizers = {} |
| 42 | if hasattr(model, 'module'): |
| 43 | model = model.module |
| 44 | # determine whether 'cfgs' has several dicts for optimizers |
| 45 | if all(isinstance(v, dict) for v in cfgs.values()): |
| 46 | for key, cfg in cfgs.items(): |
| 47 | cfg_ = cfg.copy() |
| 48 | module = getattr(model, key) |
| 49 | optimizers[key] = build_optimizer(module, cfg_) |
| 50 | return optimizers |
| 51 | |
| 52 | return build_optimizer(model, cfgs) |