pytorch框架学习(12)——学习率调整策略

1. pytorch的六种学习率调整策略

  • class _LRScheduler

    • 主要属性:
      • optimizer:关联的优化器
      • last_epoch:记录epoch数
      • base_lrs:记录初试学习率
    • 主要方法:
      • step():更新下一个epoch的学习率
      • get_lr():虚函数,计算下一个epoch的学习率
  • 1.StepLR

    • 功能:等间隔调整学习率
    • 主要参数:
      • step_size:调整间隔数
      • gamma:调整系数
    • 调整方式:lr = lr * gamma
  • 2.MultiStepLR

    • 功能:按给定间隔调整学习率
    • 主要参数:
      • milestones:设定调整时刻数
      • gamma:调整系数
    • 调整方式:lr = lr * gamma
milestones = [50, 125, 160]
scheduler_lr = optim.lr_scheduler.MultiStepLR(optimizer, milestones, gamma=0.1)
  • 3.ExponentialLR
    • 功能:按指数衰减调整学习率
    • 主要参数:
      • gamma:指数的底(通常会设定为一个接近1的数)
    • 调整方式:lr = lr * gamma ** epoch
gamma = 0.95
scheduler_lr = optim.lr_scheduler.ExponentialLR(optimizer, gamma=gamma)

在这里插入图片描述

  • 4.CosineAnnealingLR
    • 功能:余弦周期调整学习率
    • 主要参数:
      • T_max:下降周期
      • eta_min:学习率下限(通常设置为0)
    • 调整方式:
      在这里插入图片描述
t_max = 50
scheduler_lr = optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=t_max, eta_min=0.)

在这里插入图片描述

  • 5.ReduceLRonPlateau
    • 功能:监控指标,当指标不再变化则调整
    • 主要参数:
      • mode:min/max两种模式
      • factor:调整系数
      • patience:“耐心”,接受几次不变化
      • cooldown:“冷却时间”,停止监控一段时间
      • verbose:是否打印日志
      • min_lr:学习率下限
      • eps:学习率衰减最小值
loss_value = 0.5
accuray = 0.9

factor = 0.1
mode = "min"
patience = 10
cooldown = 10
min_lr = 1e-4
verbose = True

scheduler_lr = optim.lr_scheduler.ReduceLROnPlateau(optimizer, factor=factor, mode=mode, patience=patience, cooldown=cooldown, min_lr=min_lr, verbose=verbose)

for epoch in range(max_epoch):
    for i in range(iteration):

        # train(...)

        optimizer.step()
        optimizer.zero_grad()

    scheduler_lr.step(loss_value)	# 监控的指标
  • 6.LambdaLR
    • 功能:自定义调整策略
    • 主要参数:
      • lr_lambda:function or list
lr_init = 0.1

weights_1 = torch.randn((6, 3, 5, 5))
weights_2 = torch.ones((5, 5))

optimizer = optim.SGD([
    {'params': [weights_1]},
    {'params': [weights_2]}], lr=lr_init)

lambda1 = lambda epoch: 0.1 ** (epoch // 20)
lambda2 = lambda epoch: 0.95 ** epoch

scheduler = torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda=[lambda1, lambda2])

lr_list, epoch_list = list(), list()
for epoch in range(max_epoch):
    for i in range(iteration):

        # train(...)

        optimizer.step()
        optimizer.zero_grad()

    scheduler.step()

    lr_list.append(scheduler.get_lr())
    epoch_list.append(epoch)

    print('epoch:{:5d}, lr:{}'.format(epoch, scheduler.get_lr()))

plt.plot(epoch_list, [i[0] for i in lr_list], label="lambda 1")
plt.plot(epoch_list, [i[1] for i in lr_list], label="lambda 2")
plt.xlabel("Epoch")
plt.ylabel("Learning Rate")
plt.title("LambdaLR")
plt.legend()
plt.show()

2. 学习率调整小结

  1. 有序调整:Step、MultiStep、Exponential和CosineAnnealing

  2. 自适应调整:ReduceLROnPleateau

  3. 自定义调整:Lambda

  4. 学习率初始化:设置较小数:0.01,0.001,0.0001

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aidanmomo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值