tensorboard 页面空白或无曲线的主因是日志路径错误、step未递增、多实验未隔离子目录;需用绝对路径指向含events文件的目录,确保add_scalar中global_step严格递增,并为每次训练创建独立时间戳子目录。

TensorBoard 启动后页面空白或 404
常见原因是 tensorboard 没有正确指向日志目录,或者路径里有中文、空格、符号导致解析失败。启动命令必须用绝对路径,且确保目录下存在 events.out.tfevents.* 文件。
- 用
python -m tensorboard.main --logdir=/absolute/path/to/logs,别用相对路径如./logs - 检查日志目录:运行
ls -l logs/(Linux/macOS)或dir logs(Windows),确认有events.out.tfevents.*文件,没有说明训练时没写入 - Windows 用户注意:路径分隔符统一用正斜杠
/或双反斜杠\,单反斜杠在 shell 中可能被转义 - 如果端口被占,默认 6006,可加
--port=6007换端口;浏览器访问时务必带http://前缀,否则可能触发搜索引擎跳转
PyTorch 训练中没看到 scalars 曲线
根本原因是没调用 add_scalar(),或调用频率太高导致前端卡顿,或 step 值没递增造成覆盖。TensorBoard 不自动采集 loss/acc,一切靠手动记录。
- 在训练循环里每轮/每 batch 调一次
writer.add_scalar('Loss/train', loss.item(), global_step),global_step必须严格递增(建议用计数器,别用 epoch × batch_size 算) - 避免高频写入:batch size 小、数据快时,每 10 个 batch 记一次比每个都记更稳,否则日志文件暴涨且页面响应慢
- 确保
writer.close()在训练结束时调用,否则最后几条记录可能滞留在缓冲区不落盘 - PyTorch Lightning 用户注意:
self.logger.experiment才是SummaryWriter实例,不是self.logger.log_metrics()
Keras 模型 fit() 时如何接入 TensorBoard 回调
TensorBoard 是 Keras 官方回调,但默认只记录 loss/metrics,不记录梯度、图结构或自定义指标,需显式配置参数才能生效。
- 基础用法:
tf.keras.callbacks.TensorBoard(log_dir='./logs', histogram_freq=1, write_graph=True) -
histogram_freq=1表示每 epoch 记一次权重直方图,设为 0 则完全不记录——很多用户以为开了回调就自动出图,其实 histogram 默认关着 -
profile_batch参数控制是否采样性能分析,设为2表示从第 2 个 batch 开始采样 2 个 batch,不设则无 profile 数据 - 若用
model.compile(..., run_eagerly=True),TensorBoard 的图模式功能(write_graph)会失效,页面里看不到计算图
多个实验日志混在一起或标签重名
TensorBoard 会把同级子目录下的所有 events 文件合并展示,如果不同实验共用一个 logs/ 目录,scalars 页面就会出现多条同名曲线互相覆盖,无法区分来源。
- 每次训练前新建带时间戳的子目录:
logs/exp_$(date +%Y%m%d_%H%M%S),或用 Python 动态生成:os.path.join('logs', f'exp_{int(time.time())}') - 给 scalar 加命名空间避免冲突:
writer.add_scalar('Train/Loss', loss, step)和writer.add_scalar('Val/Loss', val_loss, step)会自动分组显示 - TensorBoard 页面左上角的「Runs」面板可勾选/取消勾选特定实验,但前提是它们位于不同子目录——同一目录下的不同 events 文件无法单独开关
- 误删日志?
tensorboard不提供清理接口,得手动rm -rf logs/*或用脚本按时间筛选
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











