mindformers.core.CosineAnnealingWarmRestarts
- class mindformers.core.CosineAnnealingWarmRestarts(base_lr: float, t_0: int, t_mult: int = 1, eta_min: float = 0., **kwargs)[源代码]
使用余弦退火调度设置每个参数组的学习率。其中 \(\eta_{max}\) 被设为初始学习率, \(T_{cur}\) 表示自上次重启以来的epoch数量, \(T_{i}\) 表示两次热重启之间的epoch数量,在SGDR中计算学习率:
\[\eta_t = \eta_{min} + \frac{1}{2}(\eta_{max} - \eta_{min})\left(1 + \cos\left(\frac{T_{cur}}{T_{i}}\pi\right)\right)\]当 \(T_{cur}=T_{i}\) 时,设置 \(\eta_t = \eta_{min}\) 。 当 \(T_{cur}=0\) (重启后),设置 \(\eta_t=\eta_{max}\) 。
请参阅论文 SGDR: Stochastic Gradient Descent with Warm Restarts 。
- 参数:
base_lr (float) - 初始学习率。
t_0 (int) - 第一个重启的周期数。
t_mult (int, 可选) - 重启周期的倍数。默认值:
1
。eta_min (float, 可选) - 学习率的最小值。默认值:
0.
。
- 输入:
global_step (int) - 全局步数。
- 输出:
学习率。
样例:
>>> import mindspore as ms >>> from mindformers.core import CosineAnnealingWarmRestarts >>> >>> ms.set_context(mode=ms.GRAPH_MODE) >>> base_lr = 0.005 >>> t_0 = 10 >>> t_mult = 2 >>> eta_min = 0.0000001 >>> >>> cosine_annealing_restart = CosineAnnealingWarmRestarts(base_lr=base_lr, ... t_0=t_0, ... t_mult=t_mult, ... eta_min=eta_min) >>> print(cosine_annealing_restart(1)) 0.0048776437 >>> print(cosine_annealing_restart(15)) 0.0042677815