torch.optim.lr_scheduler.CosineAnnealingWarmRestarts、OneCycleLR定义与使用

torch中有多种余弦退火学习率调整方法,包括:OneCycleLR、CosineAnnealingLR和CosineAnnealingWarmRestarts。

CosineAnnealingWarmRestarts(带预热的余弦退火)学习率方法定义

torch.optim.lr_scheduler.CosineAnnealingWarmRestarts(optimizer, T_0, T_mult=1, \
eta_min=0, last_epoch=- 1, verbose=False)

CosineAnnealingWarmRestarts参数:

- optimizer (Optimizer) – Wrapped optimizer. 优化器

- T_0 (int) – Number of iterations for the first restart.学习率第一次回到初始值的epoch位置

- T_mult (int, optional) – A factor increases T_{i} mult应该是multiply的意思,即T_mult=2意思是周期翻倍,第一个周期是1,则第二个周期是2,第三个周期是4。

- eta_min (float, optional) – Minimum learning rate. Default: 0.

- last_epoch (int, optional) – The index of last epoch. Default: -1.

- verbose (bool) – If True, prints a message to stdout for each update. Default: False.

CosineAnnealingWarmRestarts使用

scheduler 初始化之后,在batch中使用scheduler.step()

import torch
from torch.optim.lr_scheduler import CosineAnnealingLR, CosineAnnealingWarmRestarts,StepLR, OneCycleLR
import torch.nn as nn
from torchvision.models import resnet18
import matplotlib.pyplot as plt

model = resnet18(pretrained=False)
optimizer = torch.optim.SGD(model.parameters(), lr=0.1)

mode = 'cosineAnnWarm'
#mode = 'cosineAnn'
if mode == 'cosineAnn':
    scheduler = CosineAnnealingLR(optimizer, T_max=5, eta_min=0.001)
elif mode == 'cosineAnnWarm':
    scheduler = CosineAnnealingWarmRestarts(optimizer, T_0=5, T_mult=2)
plt.figure()
max_epoch = 50
iters = 200
cur_lr_list = []
for epoch in range(max_epoch):
    for batch in range(iters):
        optimizer.step()
        scheduler.step()
    cur_lr = optimizer.param_groups[-1]['lr']
    cur_lr_list.append(cur_lr)
    print('Cur lr:', cur_lr)
x_list = list(range(len(cur_lr_list)))
plt.plot(x_list, cur_lr_list)
plt.show()

在这里插入图片描述

 OneCycleLR使用

        pytorch版本>=1.7

mode = 'OneCycleLR'
#mode = 'cosineAnn'
max_epoch = 500
iters = 200
if mode == 'cosineAnn':
    scheduler = CosineAnnealingLR(optimizer, T_max=5, eta_min=0.001)
elif mode == 'cosineAnnWarm':
    scheduler = CosineAnnealingWarmRestarts(optimizer, T_0=5, T_mult=2)
elif mode == 'OneCycleLR':
    scheduler = OneCycleLR(optimizer, max_lr=0.5, steps_per_epoch=iters, epochs=max_epoch, pct_start=o.3)
plt.figure()
cur_lr_list = []
for epoch in range(max_epoch):
    for batch in range(iters):
        optimizer.step()
        scheduler.step()
    cur_lr = optimizer.param_groups[-1]['lr']
    cur_lr_list.append(cur_lr)
    #print('Cur lr:', cur_lr)
x_list = list(range(len(cur_lr_list)))
plt.plot(x_list, cur_lr_list)
plt.show()

在这里插入图片描述

        在目前的pytorch1.9版本中新添加了一个three_phase参数,当这个three_phase=True

scheduler=torch.optim.lr_scheduler.OneCycleLR(optimizer,max_lr=0.9,steps_per_epoch=iters, epochs=max_epoch, pct_start=o.3,three_phase=True)

        得到的学习率变成下图:对称+陡降

————————————————
修改自:https://blog.csdn.net/qq_30129009/article/details/121732567

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
torch.optim.lr_scheduler.OneCycleLRPyTorch中的一个学习率调度器,用于调整训练过程中的学习率。它基于"一周期"的概念,通过在训练周期中逐步增加和递减学习率来提高训练的效果。这个调度器可以根据指定的参数进行配置和使用。 引用中给出了一个可以直接使用的OneCycleLR配置示例,其中max_lr参数设置了学习率的最大值,total_steps参数设置了训练的总步数。这样配置后,调度器会在训练过程中逐步增加和递减学习率。 引用提到,在PyTorch 1.9版本中加入了一个新的参数three_phase。当设置three_phase=True时,可以使用指定的最大学习率、总步数和三个阶段的学习率调整。 引用给出了一个官方的使用例子,其中使用了DataLoader加载数据,使用SGD优化器和OneCycleLR调度器进行训练。在每个训练周期中,通过调用scheduler.step()更新学习率。 综上所述,torch.optim.lr_scheduler.OneCycleLRPyTorch中的一个学习率调度器,可以根据指定的参数配置和使用,通过逐步增加和递减学习率来提高训练的效果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [torch.optim.lr_scheduler.OneCycleLR 学习与理解](https://blog.csdn.net/jiongta9473/article/details/131246851)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [torch.optim.lr_scheduler.OneCycleLR用法](https://blog.csdn.net/daixiangzi/article/details/112716970)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值