新开传奇网站999新服网,产品设计ppt案例,网站建设外包怎么样,网站建设合同拟写目录
前言
一、什么是调整学习率#xff1f;
二、调整学习率的作用
三、怎么调整学习率
1.有序调整
2.自适应调整
3.自定义调整
4.调整示例 前言 在深度学习中#xff0c;调整学习率是非常重要的#xff0c;它对模型的训练效果和收敛速度有显著影响。 一、什么是调整…目录
前言
一、什么是调整学习率
二、调整学习率的作用
三、怎么调整学习率
1.有序调整
2.自适应调整
3.自定义调整
4.调整示例 前言 在深度学习中调整学习率是非常重要的它对模型的训练效果和收敛速度有显著影响。 一、什么是调整学习率
学习率是深度学习中一个关键的超参数控制着模型在每次更新时权重的调整幅度。它决定了梯度下降算法在最小化损失函数时的步长。较大的学习率可能导致模型不收敛或震荡而较小的学习率则可能使收敛速度过慢。因此选择合适的学习率对于模型训练的成功至关重要。常用的学习率有0.1、0.01以及0.001等学习率越大则权重更新越快。一般来说我们希望在训练初期学习率大一些使得网络收敛迅速在训练后期学习率小一些使得网络更好的收敛到最优解。 二、调整学习率的作用 调整学习率的目的是优化模型训练过程提高收敛速度并确保最终模型的性能。通过合理调整学习率可以避免训练过程中的震荡或不收敛帮助模型更有效地找到最优解最终提升模型的泛化能力和准确性。 三、怎么调整学习率
Pytorch学习率调整策略通过 torch.optim.lr_sheduler 接口实现。
1.有序调整
等间隔调整(Step)多间隔调整(MultiStep)指数衰减(Exponential)余弦退火(CosineAnnealing)
下图是不同方法的概念图
代码展示
有序调整学习率
optimizer torch.optim.Adam(model.parameters(), lr0.001)等间隔调整
torch.optim.lr_scheduler.StepLR(optimizer, step_size, gamma0.1)
# optimizer: 神经网络训练中使用的优化器,
# step_size: 学习率下降间隔数,单位是epoch,而不是iteration.
# gamma:学习率调整倍数,默认为0.1
# 每训练step_size个epoch,学习率调整为lrlr*gamma.多间隔调整
torch.optim.lr_shceduler.MultiStepLR(optimizer, milestones, gamma0.1)
# milestone(list): 一个列表参数,表示多个学习率需要调整的epoch值,
# 如milestones[10, 30, 80],即10轮时将gamma乘以学习率lr,30轮时、80轮时与10轮时操作一致指数衰减
torch.optim.lr_scheduler.ExponentialLR(optimizer, gamma)
# gamma:学习率调整倍数的底数,指数为epoch,初始值为lr, 倍数为γepoch,每一轮都调整余弦退火
torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max, eta_min0)
# T_max:学习率下降到最小值时的epoch数,即当epochT_max时,学习率下降到余弦函数最小值,当epochT_max时,学习率将增大
# eta_min: 学习率调整的最小值,即epochT_max时,lr_mineta_min, 默认为0. 2.自适应调整
依训练状况伺机而变通过监测某个指标的变化情况(loss、accuracy)当该指标不怎么变化时就是调整学习率的时机(ReduceLROnPlateau)
根据指标调整学习率
torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, modemin, factor0.1,patience10,verboseFalse, threshold0.0001, threshold_moderel, cooldown0, min_lr0, eps1e-08)
参数解释optimizer: 需要调整学习率的优化器。mode: 字符串选择监控的指标类型。min 表示当被监控的指标停止下降时学习率将减小; max 表示当指标停止上升时减小学习率。factor: 每次调整学习率时学习率将乘以这个因子通常在 0 到 1 之间。例如,float 0.1表示学习率减少到原来的 10%。patience: 监控指标在没有改善时等待的 epochs 数。在这段时间内如果指标没有改善学习率将被调整。verbose: 布尔值是否在调整学习率时打印消息。threshold: 改变学习率的最小阈值。如果变化小于该阈值则认为没有改善。这个值可以是绝对值或相对值具体取决于 threshold_mode。threshold_mode: 字符串, rel 表示使用相对阈值与当前值的比例, abs 表示使用绝对阈值。cooldown: 在学习率被减少后允许继续训练的 epochs 数。在此期间将不会调整学习率。min_lr: 学习率的最小值防止学习率降到过低。eps: 一个很小的值避免除以零的错误通常在计算时用作保护。 3.自定义调整
通过自定义关于epoch的lambda函数调整学习率(LambdaLR)。
torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda)
# 参数
# lr_lambda(function or list): 自定义计算学习率调整倍数的函数通常是epoch的函数当有多个参数组时设为list.4.调整示例
在每个epoch的训练中使用 scheduler.step() 即可进行学习率的更新
有序调整学习率
loss_fn nn.CrossEntropyLoss() # 处理多分类
optimizer torch.optim.Adam(model.parameters(), lr0.001)
scheduler torch.optim.lr_scheduler.StepLR(optimizer, step_size5, gamma0.5) # 调整学习率epochs 50for t in range(epochs):print(fEpoch {t 1}\n--------------)train(train_dataloader, model, loss_fn, optimizer)test(test_dataloader, model, loss_fn)scheduler.step() # 在每个epoch的训练中.使用scheduler.step()语句进行学习率更新
print(best_acc)