docstr: Called every step of training.
docstr_tok: ["Called","every","step","of","training","."]
code: def step(self):
      """Called every step of training."""
      self._train_scheduler.step()
  
      if self._eval_scheduler is not None:
          # We apply this scheduler every eval step, not train step, so we don't want to call step() here.
          # However, we need to re-apply the LR reduction to the LR from the train scheduler, as the first scheduler
          # resets the LR back to the base LR.
          self._eval_scheduler.apply_lr()
  
imports: import logging
  import math
  from typing import Any, Callable, Dict
  from torch.optim import Optimizer
  from torch.optim.lr_scheduler import CosineAnnealingWarmRestarts, LambdaLR, ReduceLROnPlateau, SequentialLR
  from ludwig.constants import MINIMIZE, TRAINING, VALIDATION
  from ludwig.modules.metric_registry import get_metric_objective
  from ludwig.schema.lr_scheduler import LRSchedulerConfig
  from ludwig.utils.metric_utils import TrainerMetric
  from ludwig.utils.trainer_utils import ProgressTracker
label_desc: Use image node_id 2 for calling the LRScheduler obj's underlying member method code with example usage: obj.step() without return types