class_docstr: Learning Rate Scheduler Plugin.
  
  This plugin manages learning rate scheduling inside of a strategy using the
  PyTorch scheduler passed to the constructor. The step() method of the
  scheduler is called after each training epoch or iteration.
  
  Metric-based schedulers (like ReduceLROnPlateau) are supported as well.
class_docstr_tok: ["Learning","Rate","Scheduler","Plugin",".","This","plugin","manages","learning","rate","scheduling","inside","of","a","strategy","using","the","PyTorch","scheduler","passed","to","the","constructor",".","The","step","(",")","method","of","the","scheduler","is","called","after","each","training","epoch","or","iteration",".","Metric-based","schedulers","(","like","ReduceLROnPlateau",")","are","supported","as","well","."]
docstr: Creates a ``LRSchedulerPlugin`` instance.
  
  :param scheduler: a learning rate scheduler that can be updated through
      a step() method and can be reset by setting last_epoch=0.
  :param reset_scheduler: If True, the scheduler is reset at the end of
      the experience. Defaults to True.
  :param reset_lr: If True, the optimizer learning rate is reset to its
      original value. Default to True.
  :param metric: the metric to use. Must be set when using
      metric-based scheduling (like ReduceLROnPlateau). Only "train_loss"
      and "val_loss" are supported at the moment. Beware that,
      when using "val_loss", the periodic evaluation flow must be enabled
      in the strategy. By default, the `eval_every` parameter of the
      base strategy is -1, which means that the validation set is never
      evaluated. Set that value to 1 to obtain the correct results.
      Also, when using `metric="val_loss"`, remember to pass a proper
      validation stream to the strategy train method, otherwise the
      periodic evaluation stream will use the training set to compute
      the validation loss.
  :param step_granularity: defines how often the scheduler's `step()`
      method will be called. Defaults to 'epoch'. Valid values are
      'epoch' and 'iteration'.
  :param first_epoch_only: if True, the scheduler will only be stepped
      in the first epoch of each training experience. This is not mutually
      exclusive with `first_exp_only`: by setting both values to True,
      the scheduler will be stepped only in the very first epoch of the
      whole training stream.
  :param first_exp_only: if True, the scheduler will only be considered
      in the first training experience.
docstr_tok: ["Creates","a","``","LRSchedulerPlugin","``","instance",".",":","param","scheduler",":","a","learning","rate","scheduler","that","can","be","updated","through","a","step","(",")","method","and","can","be","reset","by","setting","last_epoch=0",".",":","param","reset_scheduler",":","If","True",",","the","scheduler","is","reset","at","the","end","of","the","experience",".","Defaults","to","True",".",":","param","reset_lr",":","If","True",",","the","optimizer","learning","rate","is","reset","to","its","original","value",".","Default","to","True",".",":","param","metric",":","the","metric","to","use",".","Must","be","set","when","using","metric-based","scheduling","(","like","ReduceLROnPlateau",")",".","Only","``","train_loss","''","and","``","val_loss","''","are","supported","at","the","moment",".","Beware","that",",","when","using","``","val_loss","''",",","the","periodic","evaluation","flow","must","be","enabled","in","the","strategy",".","By","default",",","the","`","eval_every","`","parameter","of","the","base","strategy","is","-1",",","which","means","that","the","validation","set","is","never","evaluated",".","Set","that","value","to","1","to","obtain","the","correct","results",".","Also",",","when","using","`","metric=","''","val_loss","''","`",",","remember","to","pass","a","proper","validation","stream","to","the","strategy","train","method",",","otherwise","the","periodic","evaluation","stream","will","use","the","training","set","to","compute","the","validation","loss",".",":","param","step_granularity",":","defines","how","often","the","scheduler","'s","`","step","(",")","`","method","will","be","called",".","Defaults","to","'epoch","'",".","Valid","values","are","'epoch","'","and","'iteration","'",".",":","param","first_epoch_only",":","if","True",",","the","scheduler","will","only","be","stepped","in","the","first","epoch","of","each","training","experience",".","This","is","not","mutually","exclusive","with","`","first_exp_only","`",":","by","setting","both","values","to","True",",","the","scheduler","will","be","stepped","only","in","the","very","first","epoch","of","the","whole","training","stream",".",":","param","first_exp_only",":","if","True",",","the","scheduler","will","only","be","considered","in","the","first","training","experience","."]
code: def __init__(
      self,
      scheduler,
      reset_scheduler=True,
      reset_lr=True,
      metric=None,
      step_granularity: Literal["epoch", "iteration"] = "epoch",
      first_epoch_only=False,
      first_exp_only=False,
  ):
      """
      Creates a ``LRSchedulerPlugin`` instance.
  
      :param scheduler: a learning rate scheduler that can be updated through
          a step() method and can be reset by setting last_epoch=0.
      :param reset_scheduler: If True, the scheduler is reset at the end of
          the experience. Defaults to True.
      :param reset_lr: If True, the optimizer learning rate is reset to its
          original value. Default to True.
      :param metric: the metric to use. Must be set when using
          metric-based scheduling (like ReduceLROnPlateau). Only "train_loss"
          and "val_loss" are supported at the moment. Beware that,
          when using "val_loss", the periodic evaluation flow must be enabled
          in the strategy. By default, the `eval_every` parameter of the
          base strategy is -1, which means that the validation set is never
          evaluated. Set that value to 1 to obtain the correct results.
          Also, when using `metric="val_loss"`, remember to pass a proper
          validation stream to the strategy train method, otherwise the
          periodic evaluation stream will use the training set to compute
          the validation loss.
      :param step_granularity: defines how often the scheduler's `step()`
          method will be called. Defaults to 'epoch'. Valid values are
          'epoch' and 'iteration'.
      :param first_epoch_only: if True, the scheduler will only be stepped
          in the first epoch of each training experience. This is not mutually
          exclusive with `first_exp_only`: by setting both values to True,
          the scheduler will be stepped only in the very first epoch of the
          whole training stream.
      :param first_exp_only: if True, the scheduler will only be considered
          in the first training experience.
      """
  
      super().__init__()
      self.scheduler = scheduler
      self.reset_scheduler = reset_scheduler
      self.reset_lr = reset_lr
      self.metric = metric
      self.rolling_metric = Mean()
      self.step_granularity = step_granularity
      self.first_epoch_only = first_epoch_only
      self.first_exp_only = first_exp_only
  
      # Used to detect and manage the periodic eval phase
      self._was_training = False
      self._just_validated = False
      self._executed_train_iteration = False
  
      arg_names = inspect.getfullargspec(self.scheduler.step)[0]
      needs_metrics = "metrics" in arg_names
  
      if needs_metrics and self.metric is None:
          raise ValueError(
              "The step method of this scheduler requires a metric "
              "(usually the loss) to be passed. Please set a proper "
              "metric parameter when creating this plugin."
          )
      elif (not needs_metrics) and self.metric is not None:
          warnings.warn(
              "You are passing a metric value but the scheduler"
              "doesn't seem to support metrics..."
          )
  
      if self.metric not in [None, "train_loss", "val_loss"]:
          raise ValueError(
              'Only scheduling based on "train_loss" and '
              "val_loss"
              ""
              f"is supported at the moment (got {metric}."
          )
  
      if self.step_granularity not in ["iteration", "epoch"]:
          raise ValueError(
              "Wrong value of step_granularity: valid values are "
              '"iteration" and "epoch"'
          )
  
      LRSchedulerPlugin._patch_lr_on_plateau(self.scheduler)
  
imports: import warnings
  from typing import TYPE_CHECKING
  from typing_extensions import Literal
  from avalanche.evaluation.metrics import Mean
  from avalanche.training.plugins import SupervisedPlugin
  import inspect
label_desc: Use image node_id 1 to create a new LRSchedulerPlugin object from inherited base classes: SupervisedPlugin with example: obj = LRSchedulerPlugin(scheduler, reset_scheduler, reset_lr, metric, step_granularity, first_epoch_only, first_exp_only)