class_docstr: Linearly warmup learning rate and then linearly decay.
  
  Args:
      optimizer (:class:`torch.optim.Optimizer`): Wrapped optimizer.
      total_steps (int): Number of total training steps.
      warmup_steps (int, optional): Number of warmup steps, defaults to 0
      last_epoch (int, optional): The index of last epoch, defaults to -1. When last_epoch=-1,
          the schedule is started from the beginning or When last_epoch=-1, sets initial lr as lr.
class_docstr_tok: ["Linearly","warmup","learning","rate","and","then","linearly","decay",".","Args",":","optimizer","(",":","class",":","`","torch.optim.Optimizer","`",")",":","Wrapped","optimizer",".","total_steps","(","int",")",":","Number","of","total","training","steps",".","warmup_steps","(","int",",","optional",")",":","Number","of","warmup","steps",",","defaults","to","0","last_epoch","(","int",",","optional",")",":","The","index","of","last","epoch",",","defaults","to","-1",".","When","last_epoch=-1",",","the","schedule","is","started","from","the","beginning","or","When","last_epoch=-1",",","sets","initial","lr","as","lr","."]
code: def get_lr(self):
      if self.last_epoch < self.warmup_steps:
          return [
              (self.last_epoch + 1) / (self.warmup_steps + 1) * lr
              for lr in self.base_lrs
          ]
      else:
          return [
              (self.total_steps - self.last_epoch)
              / (self.total_steps - self.warmup_steps)
              * lr
              for lr in self.base_lrs
          ]
  
imports: from torch.optim.lr_scheduler import _LRScheduler
label_desc: Use image node_id 2 for calling the LinearWarmupLR obj's underlying member method code with example usage: obj.get_lr() and returns: unknown, unknown