class_docstr: Update a parameter during training by using a multi step function.
  The function decays the parameter value by gamma once the number of steps reaches one of the milestones.
  Based on MultiStepLR from PyTorch.
  https://pytorch.org/docs/stable/generated/torch.optim.lr_scheduler.MultiStepLR.html
  
  Args:
      initial_value: Starting value of the parameter.
      gamma: Multiplicative factor of parameter value decay.
      milestones: List of step indices. Must be increasing.
      param_name: name of parameter to update.
      save_history: whether to log the parameter values to
          `engine.state.param_history`, (default=False).
      create_new: whether to create ``param_name`` on
          ``engine.state`` taking into account whether
          ``param_name`` attribute already exists or not.
          Overrides existing attribute by default, (default=False).
  
  Examples:
  
      .. include:: defaults.rst
          :start-after: :orphan:
  
      .. testcode::
  
          default_trainer = get_default_trainer()
  
          param_scheduler = MultiStepStateScheduler(
              param_name="param", initial_value=1, gamma=0.9, milestones=[3, 6, 9, 12], create_new=True
          )
  
          # parameter is param, initial_value sets param to 1, gamma is set as 0.9
          # Epoch 1 to 2, param does not change as milestone is 3
          # Epoch 3, param changes from 1 to 1*0.9, param = 0.9
          # Epoch 3 to 5, param does not change as milestone is 6
          # Epoch 6, param changes from 0.9 to 0.9*0.9, param = 0.81
          # Epoch 6 to 8, param does not change as milestone is 9
          # Epoch 9, param changes from 0.81 to 0.81*0.9, param = 0.729
          # Epoch 9 to 11, param does not change as milestone is 12
          # Epoch 12, param changes from 0.729 to 0.729*0.9, param = 0.6561
  
          param_scheduler.attach(default_trainer, Events.EPOCH_COMPLETED)
  
          @default_trainer.on(Events.EPOCH_COMPLETED)
          def print_param():
              print(default_trainer.state.param)
  
          default_trainer.run([0], max_epochs=12)
  
      .. testoutput::
  
          1.0
          1.0
          0.9
          0.9
          0.9
          0.81
          0.81
          0.81
          0.7290...
          0.7290...
          0.7290...
          0.6561
  
  .. versionadded:: 0.4.7
class_docstr_tok: ["Update","a","parameter","during","training","by","using","a","multi","step","function",".","The","function","decays","the","parameter","value","by","gamma","once","the","number","of","steps","reaches","one","of","the","milestones",".","Based","on","MultiStepLR","from","PyTorch",".","https",":","\/\/pytorch.org\/docs\/stable\/generated\/torch.optim.lr_scheduler.MultiStepLR.html","Args",":","initial_value",":","Starting","value","of","the","parameter",".","gamma",":","Multiplicative","factor","of","parameter","value","decay",".","milestones",":","List","of","step","indices",".","Must","be","increasing",".","param_name",":","name","of","parameter","to","update",".","save_history",":","whether","to","log","the","parameter","values","to","`","engine.state.param_history","`",",","(","default=False",")",".","create_new",":","whether","to","create","``","param_name","``","on","``","engine.state","``","taking","into","account","whether","``","param_name","``","attribute","already","exists","or","not",".","Overrides","existing","attribute","by","default",",","(","default=False",")",".","Examples",":","..","include",":",":","defaults.rst",":","start-after",":",":","orphan",":","..","testcode",":",":","default_trainer","=","get_default_trainer","(",")","param_scheduler","=","MultiStepStateScheduler","(","param_name=","''","param","''",",","initial_value=1",",","gamma=0.9",",","milestones=","[","3",",","6",",","9",",","12","]",",","create_new=True",")","#","parameter","is","param",",","initial_value","sets","param","to","1",",","gamma","is","set","as","0.9","#","Epoch","1","to","2",",","param","does","not","change","as","milestone","is","3","#","Epoch","3",",","param","changes","from","1","to","1","*","0.9",",","param","=","0.9","#","Epoch","3","to","5",",","param","does","not","change","as","milestone","is","6","#","Epoch","6",",","param","changes","from","0.9","to","0.9","*","0.9",",","param","=","0.81","#","Epoch","6","to","8",",","param","does","not","change","as","milestone","is","9","#","Epoch","9",",","param","changes","from","0.81","to","0.81","*","0.9",",","param","=","0.729","#","Epoch","9","to","11",",","param","does","not","change","as","milestone","is","12","#","Epoch","12",",","param","changes","from","0.729","to","0.729","*","0.9",",","param","=","0.6561","param_scheduler.attach","(","default_trainer",",","Events.EPOCH_COMPLETED",")","@","default_trainer.on","(","Events.EPOCH_COMPLETED",")","def","print_param","(",")",":","print","(","default_trainer.state.param",")","default_trainer.run","(","[","0","]",",","max_epochs=12",")","..","testoutput",":",":","1.0","1.0","0.9","0.9","0.9","0.81","0.81","0.81","0.7290","...","0.7290","...","0.7290","...","0.6561","..","versionadded",":",":","0.4.7"]
code: def __init__(
      self,
      initial_value: float,
      gamma: float,
      milestones: List[int],
      param_name: str,
      save_history: bool = False,
      create_new: bool = False,
  ):
      super(MultiStepStateScheduler, self).__init__(
          param_name, save_history, create_new
      )
      self.initial_value = initial_value
      self.gamma = gamma
      self.milestones = milestones
      self._state_attrs += ["initial_value", "gamma", "milestones"]
  
imports: import numbers
  import warnings
  from bisect import bisect_right
  from typing import Any, List, Sequence, Tuple, Union
  from ignite.engine import CallableEventWithFilter, Engine, Events, EventsList
  from ignite.handlers.param_scheduler import BaseParamScheduler
label_desc: Use image node_id 1 to create a new MultiStepStateScheduler object from inherited base classes: StateParamScheduler with example: obj = MultiStepStateScheduler(initial_value, gamma, milestones, param_name, save_history, create_new)