概述:本文主要讲述要在pytorch中设置学习速率自动调整的方法,即如何使用torch.optim.lr_scheduler
。
torch.optim.lr_scheduler
提供了几种方法来根据epoches的数量调整学习率。
ReduceLROnPlateau
torch.optim.lr_scheduler.ReduceLROnPlateau
允许基于一些验证测量来降低动态学习速率。
1 | class torch.optim.lr_scheduler.LambdaLR(optimizer, lr_lambda, last_epoch=-1) |
将每个参数组的学习速率设置为初始的lr乘以一个给定的函数。当last_epoch=-1时,将初始lr设置为lr。
参数:
- optimizer (Optimizer) – 包装的优化器。
- lr_lambda (function or list) – 一个函数来计算一个乘法因子给定一个整数参数的
epoch
,或列表等功能,为每个组optimizer.param_groups
。 - last_epoch (int) – 最后一个时期的索引。默认: -1.
例子:
1 | # Assuming optimizer has two groups. |
将每个参数组的学习速率设置为每个step_size时间段由gamma衰减的初始lr。当last_epoch = -1时,将初始lr设置为lr。
- optimizer (Optimizer) – 包装的优化器。
- step_size (int) – 学习率衰减期。
- gamma (float) – 学习率衰减的乘积因子。默认值:-0.1。
- last_epoch (int) – 最后一个时代的指数。默认值:1。
例子:
1 | # Assuming optimizer uses lr = 0.5 for all groups |
一旦时间的数量达到一个里程碑,则将每个参数组的学习率设置为伽玛衰减的初始值。当last_epoch=-1时,将初始lr设置为lr。
参数:
- optimizer (Optimizer) – 包装的优化器。
- milestones (list) – 时期指标的列表。必须增加。
- gamma (float) – 学习率衰减的乘积因子。 默认: -0.1.
- last_epoch (int) – 最后一个时代的指数。 默认: -1.
例子:
1 | # Assuming optimizer uses lr = 0.5 for all groups |
1 | class torch.optim.lr_scheduler.ExponentialLR(optimizer, gamma, last_epoch=-1) |
将每个参数组的学习速率设置为每一个时代的初始lr衰减。当last_epoch=-1时,将初始lr设置为lr。
- optimizer (Optimizer) – 包装的优化器。
- gamma (float) – 学习率衰减的乘积因子。
- last_epoch (int) – 最后一个指数。默认: -1.
1 | class torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode='min', factor=0.1, patience=10, verbose=False, threshold=0.0001, threshold_mode='rel', cooldown=0, min_lr=0, eps=1e-08) |
当指标停止改善时,降低学习率。当学习停滞不前时,模型往往会使学习速度降低2-10倍。这个调度程序读取一个指标量,如果没有提高epochs的数量,学习率就会降低。
- optimizer (Optimizer) – 包装的优化器。
- mode (str) – min, max中的一个. 在最小模式下,当监测量停止下降时,lr将减少; 在最大模式下,当监控量停止增加时,会减少。默认值:’min’。
- factor (float) – 使学习率降低的因素。 new_lr = lr * factor. 默认: 0.1.
- patience (int) –epochs没有改善后,学习率将降低。 默认: 10.
- verbose (bool) – 如果为True,则会向每个更新的stdout打印一条消息。 默认: False.
- threshold (float) – 测量新的最优值的阈值,只关注显着变化。 默认: 1e-4.
- threshold_mode (str) – rel, abs中的一个. 在rel模型, dynamic_threshold = best ( 1 + threshold ) in ‘max’ mode or best ( 1 - threshold ) 在最小模型. 在绝对值模型中, dynamic_threshold = best + threshold 在最大模式或最佳阈值最小模式. 默认: ‘rel’.
- cooldown (int) – 在lr减少后恢复正常运行之前等待的时期数。默认的: 0.
- min_lr (float or list) – 标量或标量的列表。对所有的组群或每组的学习速率的一个较低的限制。 默认: 0.
- eps (float) – 适用于lr的最小衰减。如果新旧lr之间的差异小于eps,则更新将被忽略。默认: 1e-8.
1 | 0.1, momentum=0.9) optimizer = torch.optim.SGD(model.parameters(), lr= |