在训练神经网络时,有些情况下,需要对学习率进行调整。在这里分别介绍TensorFlow和PyTorch的一种方法。
tf.train.exponential_decay()TensorFlow提供了指数衰减法
tf.train.exponential_decay(learning_rate, global_step=global_step, decay_steps=100,decay_rate=0.99, staircase=True)
计算公式:
learning_rate * decay_rate^(global_step / decay_steps)
参数 learning_rate:初始学习率 global_step:计数器,每进行一次更新,加1 decay_steps:衰减步长 decay_rate:衰减系数 staircase:若为True,则学习率呈阶梯形式下降,即global / decay_steps为整数。相当于每隔decay_steps更新一次学习率;若为False,则学习率呈连续下降,即global / decay_steps为浮点型,每一步都会更新一次学习率。PyTorch提供了基于epoch的学习率下降方法。该方法只是其中一种
torch.optim.lr_scheduler.StepLR(optimizer,step_size=100,gamma=0.99,last_epoch=-1)
计算公式:
learning_rate * gamma^(epoch / step_size)
参数 optimizer:自己定义的优化器 step_size:衰减步长,即每隔step_size个epoch,更新一次学习率 gamma(float):衰减系数 last_epoch(int):最后一次epoch的索引默认为-1optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)
scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=100, gamma=0.99)
# 之后搭配 scheduler.step()进行操作。
参考文献:https://www.cnblogs.com/happystudyeveryday/p/11144433.html