class_docstr: Trainer extension to exponentially shift an optimizer attribute.
  
  This extension exponentially increases or decreases the specified attribute
  of the optimizer. The typical use case is an exponential decay of the
  learning rate.
  
  This extension is also called before the training loop starts by default.
  
  Args:
      attr (str): Name of the attribute to shift.
      rate (float): Rate of the exponential shift. This value is multiplied
          to the attribute at each call.
      init (float): Initial value of the attribute. If it is ``None``, the
          extension extracts the attribute at the first call and uses it as
          the initial value.
      target (float): Target value of the attribute. If the attribute reaches
          this value, the shift stops.
      optimizer (~chainer.Optimizer): Target optimizer to adjust the
          attribute. If it is ``None``, the main optimizer of the updater is
          used.
class_docstr_tok: ["Trainer","extension","to","exponentially","shift","an","optimizer","attribute",".","This","extension","exponentially","increases","or","decreases","the","specified","attribute","of","the","optimizer",".","The","typical","use","case","is","an","exponential","decay","of","the","learning","rate",".","This","extension","is","also","called","before","the","training","loop","starts","by","default",".","Args",":","attr","(","str",")",":","Name","of","the","attribute","to","shift",".","rate","(","float",")",":","Rate","of","the","exponential","shift",".","This","value","is","multiplied","to","the","attribute","at","each","call",".","init","(","float",")",":","Initial","value","of","the","attribute",".","If","it","is","``","None","``",",","the","extension","extracts","the","attribute","at","the","first","call","and","uses","it","as","the","initial","value",".","target","(","float",")",":","Target","value","of","the","attribute",".","If","the","attribute","reaches","this","value",",","the","shift","stops",".","optimizer","(","~chainer.Optimizer",")",":","Target","optimizer","to","adjust","the","attribute",".","If","it","is","``","None","``",",","the","main","optimizer","of","the","updater","is","used","."]
code: def _get_optimizer(self, trainer):
      return self._optimizer or trainer.updater.get_optimizer("main")
  
file_path: chainer/chainer/training/extensions/exponential_shift.py
imports: from __future__ import division
  import numpy
  from chainer.training import extension
label_desc: Use image node_id 5 for calling the ExponentialShift obj's underlying member method code with example usage: obj._get_optimizer(trainer) and returns: unknown