TensorBoard看不到图的主因是未正确初始化和使用summary writer。需确保TF2.x中用tf.summary.create_file_writer配合as_default上下文、传入step参数、清空旧日志、绝对路径,且graph可视化需显式trace_on与trace_export。

TensorBoard 能实时监控训练过程,但必须在训练前就写入日志,中途启动无法回溯历史数据。
为什么 tensorboard --logdir=logs 启动后看不到图?
常见错误是训练代码没调用 tf.summary.FileWriter(TF1.x)或 tf.summary.create_file_writer(TF2.x),或者路径写错、writer 没 .flush()。
- TF2.x 中默认启用 eager execution,
tf.summary.scalar等必须在tf.summary.create_file_writer的as_default()上下文中调用 - 日志目录名不能含空格或中文;建议用绝对路径,如
/tmp/my_logs,避免相对路径导致找不到 - 每次运行训练前,清空旧日志(
rm -rf logs/),否则 TensorBoard 可能混入过期 graph 或指标
TF2.x 中记录 loss 和 accuracy 的最小可行代码
关键不是“加多少行”,而是确保 writer 生命周期覆盖整个训练循环,并且每 step 写一次。
- 定义 writer:
train_log_dir = 'logs/train'; train_summary_writer = tf.summary.create_file_writer(train_log_dir) - 在训练循环内(如
for epoch in range(...)中)用with train_summary_writer.as_default():包裹tf.summary.scalar - 必须写
step参数,例如tf.summary.scalar('loss', loss, step=epoch * steps_per_epoch + batch_idx),否则所有值堆在 step 0 - 不需要手动
flush(),但若想立即看到(比如调试时只跑 2 步),可在循环末尾加train_summary_writer.flush()
可视化网络结构时 graph 显示为空?
TensorBoard 的 Graph 面板只显示被 trace 过的计算图,不是模型定义本身。TF2.x 默认不 trace,需显式启用。
立即学习“Python免费学习笔记(深入)”;
- 训练前加
tf.summary.trace_on(graph=True, profiler=True) - 在第一个
train_step执行完后(比如第一次model.train_on_batch或自定义训练步之后),立刻调用tf.summary.trace_export(name='graph_trace', step=0) - 注意:trace 会显著拖慢首次 step,仅调试时开启;正式训练前注释掉这两行
- 如果用
@tf.function包装训练步,graph 会更完整;否则可能只看到 eager 模式下的零碎 op
最易忽略的是 step 编号连续性 —— 如果你用 epoch 当作全局 step,loss 曲线就会锯齿状重叠;必须用全局递增整数,否则 TensorBoard 无法对齐横轴。


















