class_docstr: Schedule the learning rate according to some function of the
  current epoch index, current learning rate, and current train/val loss.
  
  :param schedule: (callable):
      should return a number of learning rates equal to the number
      of optimizer.param_groups. It should take the epoch index and
      **kwargs (or logs) as argument. **kwargs (or logs) will return
      the epoch logs such as mean training and validation loss from
      the epoch
docstr: WARNING: Do NOT use this callback with self-adjusting learners like Yellowfin
docstr_tok: ["WARNING",":","Do","NOT","use","this","callback","with","self-adjusting","learners","like","Yellowfin"]
code: def on_epoch_begin(self, epoch, logs=None):
      """
      WARNING: Do NOT use this callback with self-adjusting learners like Yellowfin
      """
      current_lrs = [
          p["lr"] for p in self.trainer._optimizer.param_groups
      ]
      lr_list = self.schedule(epoch, current_lrs, **logs)
      if not isinstance(lr_list, list):
          lr_list = [lr_list]
  
      for param_group, lr_change in zip(
          self.trainer._optimizer.param_groups, lr_list
      ):
          param_group["lr"] = lr_change
  
imports: import warnings
  from .None import Callback
label_desc: Use image node_id 3 for calling the LRScheduler obj's underlying member method code with example usage: obj.on_epoch_begin(epoch, logs) without return types