class_docstr: A callback which logs learning rate of tracked optimizers and learning rate schedulers.
  Logs learning rate for each parameter group associated with an optimizer.
  
  Args:
      loggers: Either a :class:`torchtnt.loggers.logger.MetricLogger` or
          list of :class:`torchtnt.loggers.logger.MetricLogger`
class_docstr_tok: ["A","callback","which","logs","learning","rate","of","tracked","optimizers","and","learning","rate","schedulers",".","Logs","learning","rate","for","each","parameter","group","associated","with","an","optimizer",".","Args",":","loggers",":","Either","a",":","class",":","`","torchtnt.loggers.logger.MetricLogger","`","or","list","of",":","class",":","`","torchtnt.loggers.logger.MetricLogger","`"]
code: def __init__(
      self,
      loggers: Union[MetricLogger, List[MetricLogger]],
      *,
      logging_interval: str = "epoch",
  ) -> None:
      if not isinstance(loggers, list):
          loggers = [loggers]
  
      expected_intervals = ("epoch", "step")
      if logging_interval not in expected_intervals:
          raise ValueError(
              f"Invalid value '{logging_interval}' for argument logging_interval. Accepted values are {expected_intervals}."
          )
  
      self._loggers: List[MetricLogger] = loggers
      self.logging_interval = logging_interval
  
file_path: tnt/torchtnt/framework/callbacks/learning_rate_monitor.py
imports: from typing import Dict, List, Union
  from torchtnt.framework.callback import Callback
  from torchtnt.framework.state import State
  from torchtnt.framework.unit import TTrainUnit
  from torchtnt.utils.loggers.logger import MetricLogger
  from torchtnt.utils.optimizer import extract_lr_from_optimizer
label_desc: Use image node_id 1 to create a new LearningRateMonitor object from inherited base classes: Callback with example: obj = LearningRateMonitor(loggers)