lr_scheduler:
1、和loss_fun还有optimizer一起定义
2、它的存在意义;
(1) 动态学习率调整:学习率决定了参数在每次迭代中的更新幅度,对训练的收敛速度和模型性能至关重要。学习率调度器允许在训练过程中动态地调整学习率,以适应不同阶段的数据分布和模型状态。
(2)稳定训练过程:随着训练的进行,模型可能会接近最优解,此时较小的学习率有助于更精细地调整参数,提高模型的收敛性。学习率调度器可以根据训练进展来调整学习率,使其逐渐减小,从而稳定训练过程。
(3)避免震荡和过拟合:过大的学习率可能导致模型参数在损失函数中来回波动,难以收敛。通过使用学习率调度器,可以在训练过程中逐渐减小学习率,避免震荡,并帮助模型更好地泛化到未见过的数据。
(4) 提高训练效率:在训练过程中,不同的阶段可能需要不同的学习率。学习率调度器可以帮助模型更快地收敛,从而提高训练效率,尤其是对于大型深度学习模型。
综合来说,学习率调度器提供了更灵活、动态的学习率调整机制,有助于优化器更好地适应不同的训练阶段和数据分布,提高深度学习模型的性能和稳定性。
3、使用:
lr_scheduler = torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones=config['lr_decay_steps'], gamma=config['lr_decay_ratio'])
milestones
(list):一个包含epoch索引的list,列表中的每个索引代表调整学习率的epoch。list中的值必须是递增的。 如 [20, 50, 100] 表示在epoch为20, 50,100
时调整学习率。gamma
(float):学习率调整倍数
在当前epoch的每一个batch都遍历之后,对他进行更新,和for batch对其:
lr_scheduler.step()