class_docstr: This Callback decreases the learning rate based on the value of some
  validation metric to be optimized (maximized or minimized). The value
  of such metric is provided by calling the `step` method on the scheduler.
  A `patience` parameter must be provided, and the scheduler will reduce
  the learning rate if no improvement in the metric is done before
  `patience` observations of the metric.
  
  Examples:
  
      `patience = 0`: learning rate will decrease at every call to
      `step`, regardless of the metric value
  
      `patience = 1`: learning rate is reduced as soon `step` is called
      with a metric value which does not improve over the best encountered
  
      `patience = 10`: learning rate is reduced if no improvement in the
      metric is recorded in 10 successive calls to `step`
  
  Parameters
  ----------
  objective
      String, can either be `"min"` or `"max"`.
  patience
      The patience to observe before reducing the learning rate, nonnegative
      integer.
  base_lr
      Initial learning rate to be used.
  decay_factor
      Factor (between 0 and 1) by which to decrease the learning rate.
  min_lr
      Lower bound for the learning rate, learning rate will never go below
      `min_lr`.
code: def on_epoch_end(
      self,
      epoch_no: int,
      epoch_loss: float,
      training_network: nn.HybridBlock,
      trainer: gluon.Trainer,
      best_epoch_info: Dict[str, Any],
      ctx: mx.Context,
  ) -> bool:
      should_continue = self.lr_scheduler.step(metric_value=epoch_loss)
      trainer.optimizer.set_learning_rate(
          self.lr_scheduler.learning_rate
      )
      return should_continue
  
imports: from dataclasses import field
  from typing import Dict, Any, Optional
  from typing_extensions import Literal
  import numpy
  import mxnet
  from mxnet import gluon
  import mxnet.gluon.nn
  from gluonts.core.component import validated
  from gluonts.pydantic import dataclass
  from .callback import Callback
label_desc: Use image node_id 2 for calling the LearningRateReduction obj's underlying member method code with example usage: obj.on_epoch_end(epoch_no, epoch_loss, training_network, trainer, best_epoch_info, ctx) and returns: should_continue