pytorch CosineAnnealingLR和CosineAnnealingWarmRestarts

1.CosineAnnealingLR

公式:

 n_min,n_max是最小和最大学习率

T_cur是从上次重启后的epoch计数(到达最低点后即重启)

T_max是经过多少个epochs重启

pytorch 函数:

torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max, eta_min=0, last_epoch=-1, verbose=False)

eta_min即 n_min

optimizer提供初始学习率,即最大学习率

T_max同上

last_epoch即上次重启的epoch索引

例子:

下图中T_max=10, eta_min=0

 下图中T_max=20, eta_min=0.5

参考:

CosineAnnealingLR — PyTorch 1.12 documentation

❖PyTorch CosineAnnealingLR - 知乎 (zhihu.com)

CosineAnnealingLR 代码解析与公式推导 - 知乎 (zhihu.com)

 2.CosineAnnealingWarmRestarts

公式:

不同之处在于T_i而不是T_max,每次重启之后的T_max是不一样的

pytorch 函数:

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

函数名跟CosinAnnealingLR()相近,参数有两个不一样,T_0就是初始restart的epoch数目,T_mult就是重启之后因子,默认是1。我觉得可以这样理解,每个restart后,T_0 = T_0 * T_mult。

例子:

T_mult=2,T_0=5, initial_lr = 0.1(最小值为0,图有点没画好)

用法:在每个iteration结束时条用scheduler.step(),参数可以是小数

>>> scheduler = CosineAnnealingWarmRestarts(optimizer, T_0, T_mult)
>>> iters = len(dataloader)
>>> for epoch in range(20):
>>>     for i, sample in enumerate(dataloader):
>>>         inputs, labels = sample['inputs'], sample['labels']
>>>         optimizer.zero_grad()
>>>         outputs = net(inputs)
>>>         loss = criterion(outputs, labels)
>>>         loss.backward()
>>>         optimizer.step()
>>>         scheduler.step(epoch + i / iters)

 参考:

CosineAnnealingWarmRestarts — PyTorch 1.12 documentation

torch.optim.lr_scheduler:调整学习率之CosineAnnealingWarmRestarts()参数说明_qq_37612828的博客-优快云博客

PyTorch torch.optim.lr_scheduler 学习率设置 调参 -- CosineAnnealingLR_zisuina_2的博客-优快云博客

余弦退火是一种学习率调整方法,用于在训练过程中动态地调整学习率。在PyTorch中,有两个常用的余弦退火方法:CosineAnnealingLRCosineAnnealingWarmRestarts。[1] CosineAnnealingLR是一种简单的余弦退火方法,它将学习率在每个epoch中按照余弦函数的形式进行调整。它的参数包括初始学习率、周期数下降的最小学习率。在每个epoch中,学习率会按照余弦函数的形式从初始学习率下降到最小学习率。当一个周期结束后,学习率会重新回到初始学习率,并开始下一个周期。这个过程会一直重复,直到训练结束。[2] CosineAnnealingWarmRestarts是一种稍微复杂一些的余弦退火方法。它在每个epoch中按照余弦函数的形式调整学习率,但是它还引入了一个重启机制。在每个重启周期结束后,学习率会重新回到初始学习率,并开始下一个重启周期。重启周期的长度会随着训练的进行而逐渐增加。这个方法可以帮助模型在训练过程中跳出局部最优解,更好地探索全局最优解的空间。[3] 在给定的代码示例中,使用了CosineAnnealingWarmRestarts方法来调整学习率。首先,定义了一个模型一个优化器,并设置了初始学习率为0.1。然后,创建了一个CosineAnnealingWarmRestarts调度器,并设置了重启周期的长度为5。在每个epoch中,调用optimizer.step()来更新模型的参数,并通过scheduler.step()来调整学习率。最后,将每个epoch的学习率保存下来,并绘制出学习率随epoch变化的曲线。[3] 通过使用余弦退火方法,可以在训练过程中动态地调整学习率,以提高模型的性能收敛速度。这种方法可以根据训练数据的特点来自适应地调整学习率,从而更好地优化模型。[4][5]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值