Pytorch中动态调整学习率

目录

一、前言

二、为什么需要动态调整学习率?

三、三种库函数调整方法


一、前言

深度学习中,学习率是一个至关重要的超参数,直接影响模型的性能和训练速度。通常,一个合适的学习率可以加速模型的收敛,但在训练过程中,固定学习率可能会导致问题。为了解决这个难题,动态调整学习率成为了深度学习优化的一项关键策略。

二、为什么需要动态调整学习率?

深度学习模型的训练过程通常会经历多个阶段,每个阶段都有不同的特点。在模型训练初期,模型需要大的学习率来快速收敛。然而,随着训练的进行,模型逐渐接近最优解,这时继续使用大学习率可能会导致模型发生震荡或不再收敛。

主要目的:在训练的不同阶段自动调整学习率的大小,以使模型在全局最优解附近更好地收敛。

三、三种库函数调整方法

Pytorch学习率调整策略通过 torch.optim.lr_scheduler 接口实现。进入可查看到以下函数:

它们可以被分为三类:

(1)有序调整: 等间隔调整(Step),多间隔调整(MultiStep),指数哀减(Exponential),余弦退火(CosineAnnealing);

(2)自适应调整: 依训练状况机而变,通过监测某个指标的变化情况(loss、accuracy),当该指标不怎么变化时,就是调整学习率的时机(ReduceLROnPlateau);

(3)自定义调整:通过自定义关于epoch的lambda函数调整学习率(LambdaLR)。

其中,最重要的是有序调整,下面进行详细介绍:

1、等间隔调整torch.optim.lr_scheduler.StepLR(optimizer, step_size, gamma, last_epoch=-1)

  • optimizer(必需参数):这是要调整学习率的优化器对象,通常是 torch.optim.Optimizer 的一个实例。StepLR 调度器将会修改该优化器的学习率。

  • step_size(必需参数):表示学习率下降的周期数。当训练周期的数量达到 step_size 的倍数时,学习率将按照 gamma 的值进行降低。例如,如果 step_size 为 30,那么学习率将在第 30、60、90,以及之后的周期进行降低。

  • gamma(必需参数):衰减因子,用于指定学习率下降的倍数。在每个周期结束时,学习率将乘以 gamma 的值以降低学习率。通常,gamma 的值是小于 1 的浮点数,以降低学习率,例如,0.1 表示学习率减小为原来的 10%。

  • last_epoch(可选参数,默认为 -1):这个参数表示最后一个训练周期的索引。如果不提供此参数,它会被初始化为 -1,然后在每次学习率更新后自动递增。

2、多间隔调整torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones, gamma=0.1, last_epoch=-1)

  • optimizer(必需参数):这是要调整学习率的优化器对象,通常是 torch.optim.Optimizer 的一个实例。MultiStepLR 调度器将会修改该优化器的学习率。

  • milestones(必需参数):这是一个列表,其中包含了一系列训练周期的索引,学习率在这些周期结束时会降低。例如,如果 milestones[30, 50, 80],那么学习率将在第 30、50、80 个周期结束时降低。

  • gamma(可选参数,默认为 0.1):衰减因子,用于指定学习率下降的倍数。在每个里程碑处,学习率将乘以 gamma 的值以降低学习率。通常,gamma 的值是小于 1 的浮点数,以降低学习率,例如,0.1 表示学习率减小为原来的 10%。

  • last_epoch(可选参数,默认为 -1):这个参数表示最后一个训练周期的索引。如果不提供此参数,它会被初始化为 -1,然后在每次学习率更新后自动递增。

3、指数哀减torch.optim.lr_scheduler.ExponentialLR(optimizer, gamma, last_epoch=-1)

  • optimizer(必需参数):这是要调整学习率的优化器对象,通常是 torch.optim.Optimizer 的一个实例。ExponentialLR 调度器将会修改该优化器的学习率。

  • gamma(必需参数):衰减因子,用于指定学习率下降的倍数。在每个训练周期结束时,学习率将乘以 gamma 的值以降低学习率。通常,gamma 的值是小于 1 的浮点数,以降低学习率。例如,如果 gamma 为 0.9,学习率将每个周期降低为原来的 90%。

  • last_epoch(可选参数,默认为 -1):这个参数表示最后一个训练周期的索引。如果不提供此参数,它会被初始化为 -1,然后在每次学习率更新后自动递增。

4、余弦退火torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max, eta_min=0, last_epoch=-1)

  • optimizer(必需参数):这是要调整学习率的优化器对象,通常是 torch.optim.Optimizer 的一个实例。CosineAnnealingLR 调度器将会修改该优化器的学习率。

  • T_max(必需参数):这是一个整数,表示学习率在一个周期内变化的次数。一个完整的周期是指学习率从最大值开始下降到 eta_min(下面介绍)再上升到最大值的过程。T_max 决定了一个完整周期的长度。

  • eta_min(可选参数,默认为 0):这是学习率在一个周期内的最小值,通常是一个小的非负数。学习率将在一个周期内从最大值下降到 eta_min,然后再上升到最大值。这有助于避免学习率过小,从而防止训练提前停止或陷入局部最小值。

  • last_epoch(可选参数,默认为 -1):这个参数表示最后一个训练周期的索引。如果不提供此参数,它会被初始化为 -1,然后在每次学习率更新后自动递增。

下面就是四种有序调整函数的学习率(lr)对于训练次数(epoch)的变化曲线:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值