linear_lr_warmup

  • paddle.fluid.layers.linear_lr_warmup(learning_rate, warmup_steps, start_lr, end_lr)[源代码]

该OP使用学习率优化策略-线性学习率热身(warm up)对学习率进行初步调整。在正常调整学习率之前,先逐步增大学习率,具体原理可参考: Bag of Tricks for Image Classification with Convolutional Neural Networks

当训练步数(global_step)小于热身步数(warmup_steps)时,学习率lr按如下方式更新:

  1. linear_step = end_lr - start_lr
  2. lr = start_lr + linear_step * (global_step / warmup_steps)

其中start_lr为warm up起始学习率,end_lr为最终学习率;

当训练步数(global_step)大于等于热身步数(warmup_steps)时,学习率lr为:

  1. lr = learning_rate

其中learning_rate为热身之后的学习率。

  • 参数:
    • learning_rate (Variable|float) - 热身之后的学习率,它可以是数据类型为float32的1D-Tensor或单个浮点数。
    • warmup_steps (int) - 进行warm up过程的步数。
    • start_lr (float) - warm up的起始学习率。
    • end_lr (float) - warm up的最终学习率。

返回:进行热身衰减后的学习率,数据类型与learning_rate相同。

返回类型:Variable

示例代码

  1. import paddle.fluid as fluid
  2.  
  3. boundaries = [100, 200]
  4. lr_steps = [0.1, 0.01, 0.001]
  5. learning_rate = fluid.layers.piecewise_decay(boundaries, lr_steps) #case1, Tensor
  6. #learning_rate = 0.1 #case2, float32
  7. warmup_steps = 50
  8. start_lr = 1. / 3.
  9. end_lr = 0.1
  10. decayed_lr = fluid.layers.linear_lr_warmup(learning_rate,
  11. warmup_steps, start_lr, end_lr)
  12.  
  13. place = fluid.CPUPlace()
  14. exe = fluid.Executor(place)
  15. exe.run(fluid.default_startup_program())
  16. out, = exe.run(fetch_list=[decayed_lr.name])
  17. print(out)
  18. # case1: [0.33333334]
  19. # case2: [0.33333334]