You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PyTorch Lightning中按Epoch记录并显示学习率?

PyTorch Lightning按Epoch记录学习率不显示的问题排查思路

我在PyTorch Lightning(PL)中尝试按Epoch记录学习率,但训练日志里始终看不到学习率指标。TensorFlow默认会自动记录学习率,我已经参照PL官方指南编写了代码,但问题依旧。以下是我的代码和训练日志示例,求解决思路:

我的实现代码

class FusionNetModule(pl.LightningModule):
...
    def configure_optimizers(self):
        optimizer = torch.optim.Adam(self.parameters(), lr=self.lr_rate)
        lr_scheduler = {'scheduler': torch.optim.lr_scheduler.ExponentialLR(optimizer, gamma=0.95),
                        'name': 'expo_lr'}
        return [optimizer], [lr_scheduler]

    def on_validation_epoch_end(self):
        # 手动记录学习率
        lr = self.trainer.lr_scheduler_configs[0].scheduler.get_last_lr()[0]
        self.log('learning_rate', lr)
        ...
...

# 学习率日志回调
lr_logger = LearningRateMonitor(logging_interval='epoch')
trainer = pl.Trainer(
    logger=True,
    max_epochs=epochs,
    accelerator="gpu",
    devices=[gpu_id],
    callbacks=[lr_logger, early_stopping, checkpoint_callback, metric_logger, progressbar],
    default_root_dir=model_path)

训练日志示例

Epoch 101: 100%|#| 23/23 [00:06<00:00,  3.43it/s, v_num=102, val_loss=0.988, val_acc=0.768, train_loss=0.965, train_acc=0.752]

排查解决思路

  • 让手动日志显示在进度条:你手动log学习率时,默认prog_bar=False,所以进度条不会显示这个指标。修改log语句,加上prog_bar=True参数:

    self.log('learning_rate', lr, prog_bar=True, logger=True)
    
  • 匹配调度器名称与LearningRateMonitor:你给调度器设置了name: 'expo_lr',LearningRateMonitor会自动记录这个名称对应的学习率,但需要确保回调的配置正确。可以先注释掉手动log的代码,仅保留LearningRateMonitor,看是否能在日志中看到expo_lr指标。

  • 明确调度器的更新周期:ExponentialLR默认需要按Epoch更新,但PL可能需要显式指定。在lr_scheduler字典中添加interval参数,确保调度器按Epoch更新:

    lr_scheduler = {
        'scheduler': torch.optim.lr_scheduler.ExponentialLR(optimizer, gamma=0.95),
        'name': 'expo_lr',
        'interval': 'epoch',  # 明确按Epoch更新调度器
        'frequency': 1
    }
    
  • 检查回调顺序与冲突:如果同时使用LearningRateMonitor和手动log,可能出现日志冲突。优先尝试单独使用LearningRateMonitor,确认是否能正常记录后,再考虑是否需要手动补充日志。

  • 确认进度条配置:如果进度条显示的指标过多,可能会隐藏学习率。可以调整ProgressBar回调的refresh_rate,或者检查是否有其他回调限制了显示的指标数量。

内容的提问来源于stack exchange,提问作者Tae-Sung Shin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 02:47:49