pytorch05——动态调整网络学习率

在之前看论文,其实也有很多点说到这个问题(学习率的选择)。如果我们学习率设置的过小,会极大的降低模型收敛速度,从而大大增加了训练时间;如果学习率太大,可能导致参数在最优解来回震荡。但是当我们选定了一个合适的学习率的时候,经过多轮的训练后,可能会出现准确率震荡或loss不再下降等情况,说明之前设置的这个学习率现在已经不能满足模型调优的需求了。此时我们就可以通过一个适当的学习率衰减策略来改善这种现象,提高我们的精度。这种设置方式在pytorch被称为scheduler。

1|01.官方API

在训练神经网络过程中,学习率是最重要的超参数之一,Pytorch封装了以下包进行调整学习率

lr_scheduler.LambdaLR

lr_scheduler.MultiplicativeLR

lr_scheduler.StepLR

lr_scheduler.MultiStepLR

lr_scheduler.ExponentialLR

lr_scheduler.CosineAnnealingLR

lr_scheduler.ReduceLROnPlateau

lr_scheduler.CyclicLR

lr_scheduler.OneCycleLR

lr_scheduler.CosineAnnealingWarmRestarts

2|02.使用官方的API

关于如何使用这些动态调整学习率的策略,参考下面的代码

# 选择一种优化器
optimizer = torch.optim.Adam(...)
# 选择上面提到的一种或多种动态调整学习率的方法
scheduler1 = torch.optim.lr_scheduler....
scheduler2 = torch.optim.lr_scheduler....
...
schedulern = torch.optim.lr_scheduler....
# 进行训练
for epoch in range(100):
train(...)
validate(...)
optimizer.step()
# 需要在优化器参数更新之后再动态调整学习率
scheduler1.step()
...
schedulern.step()
# 注:我们在使用官方给出的torch.optim.lr_scheduler时,需要将scheduler.step()放在scheduler.step()后使用

3|03.自定义scheduler

def adjust_learning_rate(optimizer,epoch):
   lr = args.lr * (0.1**(epoch//30)) #每三十轮学习率降低百分之十
    for param_group in optimizer.param_groups:
      param_group['lr'] = lr

我们再通过adjust_learning_rate函数定义,在训练过程中就可以调用我们的函数来实现学习率的动态变化

def adjust_learning_rate(optimizer,...):
...
optimizer = torch.optim.SGD(model.parameters(),lr = args.lr,momentum = 0.9)
for epoch in range(10):
train(...)
validate(...)
adjust_learning_rate(optimizer,epoch)

__EOF__

本文作者DeepBrainBoy
本文链接https://www.cnblogs.com/tccjx/articles/16020593.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   TCcjx  阅读(582)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示

喜欢请打赏

扫描二维码打赏

支付宝打赏