动态学习率
对学习率应用指数衰减
一、V1版本
之前查来查去,往上最多的调用方式就是使用tf.train.exponential_decay,直接调用就会报错,原因是tf2中这个函数改名了,当然也可以通过如下方式进行调用。
官方文档链接
tf.compat.v1.train.exponential_decay官方文档
函数及参数
tf.compat.v1.train.exponential_decay(
learning_rate,# 最初学习率
global_step, # 计算运行了几轮BATCH_SIZE的计数器,初值给0, 设为不被训练
decay_steps, # 喂入多少轮BATCH-SIZE以后,更新一次学习率。一般为总样本数量/BATCH_SIZE
decay_rate, # 学习率的衰减率
staircase=False, # 如果staircase=True,那就表明每decay_steps次计算学习速率变化,更新原始学习速率,如果是False,那就是每一步都更新学习速率。
name=None
)
计算公式
1.当staircase=False时
decayed_learning_rate = learning_rate *
decay_rate ^ (global_step / decay_steps)
衰减后的学习率 = 初始学习率x衰减系数^(全局步数/衰减步数)
学习率是每次逐渐衰减的
2.当staircase=True时, (global_step / decay_steps)会向下取整,即阶梯型向下衰减,是突然衰减的
例子
比如在(我的学习项目)中,训练集是1714,batch_size用的是32,在staircase为True的情况,给定初始学习率为1e-3,学习率衰减率为0.95,decay_steps为54(1714/32=54,即每个eopch学习率衰减一次)。
则随着迭代次数从1到2,第二轮的学习率变为0.001*0.95^ (54/54)=9.5e-4,第三轮是0.001*0.95^(108/54)=9.025e-4
如果是False,学习率变动就是指数型0.001*0.95^ (1/54),0.001*0.95^ (2/54)。。。。。。。0.001*0.95^(54/54)
二、V2版本
说明
在tensorflow2中,该api改名叫tf.keras.optimizers.schedules.ExponentialDecay,总体来说没有区别,一一对应即可,唯一差别在于原gloabl_steps,现steps不需要设定了
官方文档
api文档
函数及参数
tf.keras.optimizers.schedules.ExponentialDecay(
initial_learning_rate, decay_steps, decay_rate, staircase=False, name=None
)
计算公式(函数)
def decayed_learning_rate(step):
return initial_learning_rate * decay_rate ^ (step / decay_steps)
可以看出计算公式没有变动,只是变量命名更容易理解
摘录自自己的深度学习学习记录
链接:深度学习-猴痘病识别