optimizer_context.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. ## @package optimizer_context
  2. # Module caffe2.python.optimizer_context
  3. from caffe2.python import context
  4. from caffe2.python.modifier_context import (
  5. ModifierContext, UseModifierBase)
  6. DEFAULT_OPTIM = 'DEFAULT'
  7. class OptimizerContext(ModifierContext, context.DefaultManaged):
  8. """
  9. provide context to allow param_info to have different optimizers
  10. """
  11. def has_optimizer(self, name):
  12. return self._has_modifier(name)
  13. def get_optimizer(self, name):
  14. assert self.has_optimizer(name), (
  15. "{} optimizer is not provided!".format(name))
  16. return self._get_modifier(name)
  17. class UseOptimizer(UseModifierBase):
  18. '''
  19. context class to allow setting the current context.
  20. Example usage with brew:
  21. - with UseOptimizer(optim):
  22. brew.func
  23. - with UseOptimizer({'WEIGHT': weight_optim}):
  24. brew.func
  25. - with UseOptimizer({'DEFAULT': optim, 'BIAS': bias_optim,
  26. 'WEIGHT': weight_optim}):
  27. brew.func
  28. - with UseOptimizer(optim1):
  29. brew.func
  30. with UseOptimizer(optim2):
  31. brew.func
  32. Example usage with layer:
  33. optimizers = {'optim1': optim1, 'optim2': optim2}
  34. with Optimizers(optimizers):
  35. optim = OptimizerContext.current().get_optimizer('optim1')
  36. layer(optim=optim)
  37. '''
  38. def _context_class(self):
  39. return OptimizerContext