学习率衰减API
指数型 lr 衰减法:
tf.train.exponential_decay(learning_rate, global_step, decay_steps, decay_rate,staircase=False, name=None)
函数参数 | 说明 |
---|---|
learning_rate | 传入的初始 lr 值 |
global_step | 用于逐步计算衰减指数 |
decay_steps | 衰减周期 |
decay_rate | 每次衰减的倍率 |
staircase | 若为 False 则是标准的指数型衰减,True 时则是阶梯式的衰减方法,目的是为了在一段时间内(往往是相同的 epoch 内)保持相同的 learning rate |
exponential_decay 示例,其中红色线条是 staircase=False,即指数型下降曲线,蓝色线条是 staircase=True,即阶梯式下降曲线
该衰减方法的优点是收敛速度较快,简单直接。
项目中用到的:tf.train.piecewise_constant(x, boundaries, values, name=None)
函数参数 | 说明 |
---|---|
x | x 即为 global step |
global_step | 用于逐步计算衰减指数 |
boundaries | boundaries=[step_1, step_2, …, step_n] 定义了在第几步进行 lr 衰减 |
values | values=[val_0, val_1, val_2, …, val_n] 定义了 lr 的初始值和后续衰减时的具体取值。需要注意的是,values 应该比 boundaries 长一个维度。 |
这种方法有助于使用者针对不同任务进行精细地调参,在任意步长后下降任意数值的 learning rate。
在train.py中 line 91 处有:
lr = tf.train.piecewise_constant(global_step,
boundaries=[np.int64(cfgs.DECAY_STEP[0]), np.int64(cfgs.DECAY_STEP[1])],
values=[cfgs.LR, cfgs.LR / 10., cfgs.LR / 100.])
在FPN中cfgs.py的原本的DECAY_STEP 设置为:
DECAY_STEP = [60000, 80000]
Tiny中的author修改为:
DECAY_STEP = [10000, 20000]
这样修改后,学习率衰减变为在第10000step进行衰减至cfgs.LR / 10.
即原来的1/10,
在第20000step进行衰减至cfgs.LR / 100.
即原来的百分之一
MOMENTUM激励都为0.9,未修改,不讨论
其他衰减策略参考:https://www.sohu.com/a/217389557_717210