| ## @package optimizer_context | |
| # Module caffe2.python.optimizer_context | |
| from __future__ import absolute_import | |
| from __future__ import division | |
| from __future__ import print_function | |
| from __future__ import unicode_literals | |
| from caffe2.python import context | |
| from caffe2.python.modifier_context import ( | |
| ModifierContext, UseModifierBase) | |
| DEFAULT_OPTIM = 'DEFAULT' | |
| @context.define_context(allow_default=True) | |
| class OptimizerContext(ModifierContext): | |
| """ | |
| provide context to allow param_info to have different optimizers | |
| """ | |
| def has_optimizer(self, name): | |
| return self._has_modifier(name) | |
| def get_optimizer(self, name): | |
| assert self.has_optimizer(name), ( | |
| "{} optimizer is not provided!".format(name)) | |
| return self._get_modifier(name) | |
| class UseOptimizer(UseModifierBase): | |
| ''' | |
| context class to allow setting the current context. | |
| Example usage with brew: | |
| - with UseOptimizer(optim): | |
| brew.func | |
| - with UseOptimizer({'WEIGHT': weight_optim}): | |
| brew.func | |
| - with UseOptimizer({'DEFAULT': optim, 'BIAS': bias_optim, | |
| 'WEIGHT': weight_optim}): | |
| brew.func | |
| - with UseOptimizer(optim1): | |
| brew.func | |
| with UseOptimizer(optim2): | |
| brew.func | |
| Example useage with layer: | |
| optimizers = {'optim1': optim1, 'optim2': optim2} | |
| with Optimizers(optimizers): | |
| optim = OptimizerContext.current().get_optimizer('optim1') | |
| layer(optim=optim) | |
| ''' | |
| def _context_class(self): | |
| return OptimizerContext |