可以做游戏可以视频约会的网站,怎么做网页上小广告,商品详情页怎么制作,毕业设计网站做几个文章目录 PyTorch动态调整学习率1.使用官方scheduler2.自定义scheduler参考 PyTorch动态调整学习率
深度学习中长久以来一直存在一个令人困扰的问题#xff0c;那就是如何选择适当的学习率。如果学习速率设置得过小#xff0c;会导致模型收敛速度缓慢#xff0c;训练时间延… 文章目录 PyTorch动态调整学习率1.使用官方scheduler2.自定义scheduler参考 PyTorch动态调整学习率
深度学习中长久以来一直存在一个令人困扰的问题那就是如何选择适当的学习率。如果学习速率设置得过小会导致模型收敛速度缓慢训练时间延长而如果学习率设置得太大可能会导致参数在最优解附近来回波动。然而即使我们选定了一个合适的学习率在经过多轮训练后仍可能出现准确率的震荡或损失不再下降等情况这表明当前的学习率已经不能满足模型调优的需求。在这种情况下我们可以采用适当的学习率衰减策略来改善模型的性能从而提高精度。这种策略在PyTorch中被称为调度器scheduler。
1.使用官方scheduler
PyTorch已经封装了一些动态调整学习率的方法这些方法位于torch.optim.lr_scheduler模块中下面列出了其中一些常用的scheduler
lr_scheduler.LambdaLRlr_scheduler.MultiplicativeLRlr_scheduler.StepLRlr_scheduler.MultiStepLRlr_scheduler.ExponentialLRlr_scheduler.CosineAnnealingLRlr_scheduler.ReduceLROnPlateaulr_scheduler.CyclicLRlr_scheduler.OneCycleLRlr_scheduler.CosineAnnealingWarmRestartslr_scheduler.ConstantLRlr_scheduler.LinearLRlr_scheduler.PolynomialLRlr_scheduler.ChainedSchedulerlr_scheduler.SequentialLR
这些 scheduler 都是继承自_LRScheduler类。可以通过help(torch.optim.lr_scheduler)来查看这些类的具体使用方法也可以通过help(torch.optim.lr_scheduler._LRScheduler)来查看_LRScheduler类的具体使用方法。
# 选择一种优化器
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()# 需要在优化器参数更新之后再动态调整学习率
# scheduler的优化是在每一轮后面进行的
scheduler1.step()
...
schedulern.step()注在使用官方给出的torch.optim.lr_scheduler时需要将scheduler.step()放在optimizer.step()后面进行使用。
2.自定义scheduler
自定义 scheduler 方法是自定义函数adjust_learning_rate来改变param_group中lr的值。
假设现在正在做实验需要学习率每30轮下降为原来的1/10假设已有的官方API中没有符合我们需求的那就需要自定义函数来实现学习率的改变。
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函数的定义在训练的过程就可以调用adjust_learning_rate函数来实现学习率的动态变化。
optimizer torch.optim.SGD(model.parameters(),lr args.lr,momentum 0.9)
for epoch in range(100):train(...)validate(...)adjust_learning_rate(optimizer,epoch)参考
深入浅出PyTorch-动态调整学习率