class_docstr: Warm up learning rate linearly
  
  Args:
      steps (int): warm up steps
      start_factor (float): initial learning rate factor
      epochs (int|None): use epochs as warm up steps, the priority
          of `epochs` is higher than `steps`. Default: None.
class_docstr_tok: ["Warm","up","learning","rate","linearly","Args",":","steps","(","int",")",":","warm","up","steps","start_factor","(","float",")",":","initial","learning","rate","factor","epochs","(","int|None",")",":","use","epochs","as","warm","up","steps",",","the","priority","of","`","epochs","`","is","higher","than","`","steps","`",".","Default",":","None","."]
code: def __call__(self, base_lr, step_per_epoch):
      boundary = []
      value = []
      if self.epochs_first and self.epochs is not None:
          warmup_steps = self.epochs * step_per_epoch
      else:
          warmup_steps = self.steps
      warmup_steps = max(warmup_steps, 1)
      for i in range(warmup_steps + 1):
          if warmup_steps > 0:
              alpha = i / warmup_steps
              factor = self.start_factor * (1 - alpha) + alpha
              lr = base_lr * factor
              value.append(lr)
          if i > 0:
              boundary.append(i)
      return boundary, value
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import sys
  import math
  import paddle
  import paddle.nn
  import paddle.optimizer
  import paddle.regularizer
  from ppdet.core.workspace import register, serializable
  import copy
  from .adamw import AdamWDL, build_adamwdl
  from ppdet.utils.logger import setup_logger
label_desc: Use image node_id 2 for calling the LinearWarmup obj's underlying member method code with example usage: obj.__call__(base_lr, step_per_epoch) and returns: boundary,  value