PyTorch 如何按照不同的策略调整学习率

PyTorch 如何按照不同的策略调整学习率

flyfish

加快训练的一个办法是随时间慢慢减少学习率,这个就是学习率衰减(learning rate decay)例如我们想要在训练的过程,学习率不是一直都是0.01,我们想根据规则进行变化的。

1、根据 scale更改学习率

def adjust_learning_rate(optimizer, scale):
    """
    Scale learning rate by a specified factor.

    :param optimizer: optimizer whose learning rate must be shrunk.
    :param scale: factor to multiply learning rate with.
    """
    for param_group in optimizer.param_groups:
        param_group['lr'] = param_group['lr'] * scale
    print("DECAYING learning rate.\n The new LR is %f\n" % (optimizer.param_groups[1]['lr'],))

2、每100个epoch按10%的速率衰减

def adjust_learning_rate(optimizer, epoch):
    """Sets the learning rate to the initial LR decayed by 10 every 100 epochs"""
    lr = args.lr * (0.1 ** (epoch // 100))
    for param_group in optimizer.param_groups:
        param_group['lr'] = lr

我们可以在自己的 epoch循环过程中调用
for epoch in range(start_epoch, epochs):

讨论

学习率动态的下降

torch.optim.lr_scheduler.ReduceLROnPlateau:

在训练过程中,对于监控某些测量值,可以让学习率动态的下降,例如如果10个epoch中的loss都不变,就可以让学习率下降.

mode(str): 模式选择,有min和max两种模式,min表示当指标不再减少(如监测loss),max表示当指标不再增加(如监测accuracy)。
factor(float): 学习率调整倍数,当监测指标达到要求时,lr=lr×factor。
patience(int): 例如忍受该指标多少个epoch不变化,忍无可忍无需再忍时,调整学习率。
verbose(bool): 是否打印学习率信息
threshold_mode (str): 选择判断指标是否达最优的模式,有两种模式:rel 和 abs.默认‘rel’

In rel mode, dynamic_threshold =
best * ( 1 + threshold ) in ‘max’ mode
best * ( 1 - threshold ) in min mode.

In abs mode, dynamic_threshold =
best + threshold in max mode
best - threshold in min mode.

也就是

threshold_mode == rel,  mode == max,dynamic_threshold = best * (1 + threshold);
threshold_mode == rel,  mode == min,dynamic_threshold = best * (1 - threshold);
threshold_mode == abs,  mode == max,dynamic_threshold = best + threshold;
threshold_mode == abs, mode == min,dynamic_threshold = best - threshold;

threshold(float): 配合threshold_mode使用。

cooldown(int): 大哥你静一静“冷却时间”,当调整学习率之后,让学习率调整策略冷静一下,让模型在训练一段时间,再重启监测模式。
min_lr(float or list): 学习率下限
eps(float): 学习率衰减的最小值,当学习率的变化值小于eps时,则不调整学习率。

你可能感兴趣的:(深度学习)