class_docstr: ```
  Applies a warmup schedule on a given learning rate decay schedule.
  Args:
      initial_learning_rate (:obj:`float`):
          The initial learning rate for the schedule after the warmup (so this will be the learning rate at the end
          of the warmup).
      decay_schedule_fn (:obj:`Callable`):
          The schedule function to apply after the warmup for the rest of training.
      warmup_steps (:obj:`int`):
          The number of steps for the warmup part of training.
      power (:obj:`float`, `optional`, defaults to 1):
          The power to use for the polynomial warmup (defaults is a linear warmup).
      name (:obj:`str`, `optional`):
          Optional name prefix for the returned tensors during the schedule.
  ```
code: def __init__(
      self,
      initial_learning_rate: float,
      decay_schedule_fn: Callable,
      warmup_steps: int,
      power: float = 1.0,
      name: str = None,
  ):
      super().__init__()
      self.initial_learning_rate = initial_learning_rate
      self.warmup_steps = warmup_steps
      self.power = power
      self.decay_schedule_fn = decay_schedule_fn
      self.name = name
  
imports: import re
  from typing import Callable, List, Optional, Union
  import tensorflow
  from packaging import version
label_desc: Use image node_id 1 to create a new WarmUp object from inherited base classes: tf.keras.optimizers.schedules with example: obj = WarmUp(initial_learning_rate, decay_schedule_fn, warmup_steps, power, name)