class_docstr: Reduce the learning rate by a factor for every *n* steps.
  
  It returns a new learning rate by::
  
      base_lr * pow(factor, floor(num_update/step))
  
  Parameters
  ----------
  step : int
      Changes the learning rate for every n updates.
  factor : float, optional
      The factor to change the learning rate.
  stop_factor_lr : float, optional
      Stop updating the learning rate if it is less than this value.
code: def __init__(
      self,
      step,
      factor=1,
      stop_factor_lr=1e-8,
      base_lr=0.01,
      warmup_steps=0,
      warmup_begin_lr=0,
      warmup_mode="linear",
  ):
      super(FactorScheduler, self).__init__(
          base_lr, warmup_steps, warmup_begin_lr, warmup_mode
      )
      if step < 1:
          raise ValueError(
              "Schedule step must be greater or equal than 1 round"
          )
      if factor > 1.0:
          raise ValueError(
              "Factor must be no more than 1 to make lr reduce"
          )
      self.step = step
      self.factor = factor
      self.stop_factor_lr = stop_factor_lr
      self.count = 0
  
imports: import logging
  from math import cos, pi
label_desc: Use image node_id 1 to create a new FactorScheduler object from inherited base classes: LRScheduler with example: obj = FactorScheduler(step, factor, stop_factor_lr, base_lr, warmup_steps, warmup_begin_lr, warmup_mode)