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

TF2.0中不使用keras.fit与estimator时TensorBoard无法显示标量的问题

问题根源:缺少Summary Writer的上下文环境

你创建了train_summary_writer和test_summary_writer,但没有把tf.summary.scalar的调用绑定到对应的writer上下文——TensorFlow需要明确知道要把标量数据写入哪个日志文件,你的代码只是调用了tf.summary.scalar,却没指定目标writer,导致数据根本没写入logs/tr或logs/ts目录的事件文件,TensorBoard自然找不到数据。

修正后的代码

import tensorflow as tf

train_loss = tf.keras.metrics.Mean('train_loss', dtype=tf.float32)
test_loss = tf.keras.metrics.Mean('test_loss', dtype=tf.float32)

train_summary_writer = tf.summary.create_file_writer('logs/tr')
test_summary_writer = tf.summary.create_file_writer('logs/ts')

for ep in range(1000):
    # 模拟更新训练/测试loss值
    train_loss(1 * ep)
    test_loss(2 * ep)
    
    # 写入训练日志:必须在train_summary_writer的上下文环境中
    with train_summary_writer.as_default():
        tf.summary.scalar('trloss', train_loss.result(), step=ep)
    
    # 写入测试日志:必须在test_summary_writer的上下文环境中
    with test_summary_writer.as_default():
        tf.summary.scalar('tsloss', test_loss.result(), step=ep)
    
    # 重置metrics,避免累计值干扰下一个epoch的结果
    train_loss.reset_states()
    test_loss.reset_states()

关键说明

  • 上下文管理器的作用:with writer.as_default()会将当前writer设为默认的summary写入目标,这个块内的tf.summary调用都会把数据写入对应日志文件。
  • 重置metrics:如果不调用reset_states(),train_loss.result()会返回从第一个epoch到当前的累计均值,而非当前epoch的单独值,这会导致曲线不符合你预期的线性增长趋势。
  • 验证日志生成:运行修正后的代码后,去logs/tr和logs/ts目录查看,应该会生成类似events.out.tfevents.xxxxxx的文件,此时再启动TensorBoard就能看到标量曲线了。

内容的提问来源于stack exchange,提问作者EyesBear

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:29:52