如何在恢复模型训练后继续TensorBoardLogger的日志记录?
解决分阶段训练TensorBoard历史日志不连贯问题
问题原因
每次启动新训练阶段时,默认初始化的TensorBoardLogger会自动生成新的版本子目录(如training-logs/test_2/version_0、version_1),TensorBoard默认仅加载单个版本的日志,导致历史训练记录无法展示。
解决方法
1. 复用同一日志版本目录
训练时手动指定TensorBoardLogger的version参数为已存在的版本号,让新训练的日志写入同一目录:
# 假设第一次训练的日志目录是 training-logs/test_2/version_0 logger = TensorBoardLogger("training-logs", name="test_2", version=0) checkpoint_callback=ModelCheckpoint(dirpath="model",filename="newmodel_2",save_last=True,verbose=True,monitor="val_ce_loss",mode="min") trainer = pl.Trainer( callbacks=[checkpoint_callback], max_epochs=100, # 设置总训练轮数(5阶段×10epoch) gpus=1, max_steps = max_steps, logger=logger, )
2. 完整恢复训练状态
仅加载模型参数无法让Trainer知晓历史训练进度,需通过resume_from_checkpoint参数完整恢复训练状态(包括epoch数、全局步数、优化器状态等),确保日志的x轴计数连贯:
base_path_ckpt = '/home/tt/model/last.ckpt' # 初始化Logger时指定复用的版本号 logger = TensorBoardLogger("training-logs", name="test_2", version=0) checkpoint_callback=ModelCheckpoint(dirpath="model",filename="newmodel_2",save_last=True,verbose=True,monitor="val_ce_loss",mode="min") # 通过resume_from_checkpoint恢复完整训练状态 trainer = pl.Trainer( callbacks=[checkpoint_callback], max_epochs=100, gpus=1, max_steps = max_steps, logger=logger, resume_from_checkpoint=base_path_ckpt ) # 无需手动加载模型,Trainer会自动处理 trainer.fit(datamodule=datamodule)
3. 正确启动TensorBoard
启动时指定根日志目录,确保加载所有历史日志:
tensorboard --logdir=training-logs
注意事项
- 务必将
max_epochs设置为总训练轮数(如100),而非单阶段的10,否则Trainer会判定训练已完成,无法继续。 - 若之前未指定固定
version,可查看training-logs/test_2下的子目录,找到对应版本号后后续训练统一使用该值。
内容的提问来源于stack exchange,提问作者diamond
相关产品推荐
相关产品推荐

