TensorFlow Summary Scalars无法在TensorBoard中显示的问题排查
解决TensorBoard标量数据不显示的问题
嘿,我一眼就看到你代码里的关键问题了——tf.summary.merge_all()放错位置了!这才导致TensorBoard收不到标量数据。
具体来说:
- 你在
with g.as_default():这个图上下文里定义了tf.summary.scalar('thing', y),这个summary节点是属于图g的。 - 但你退出这个上下文块之后才调用
merged = tf.summary.merge_all(),这时候默认图已经不是g了(回到了reset_default_graph()后的空默认图),所以merge_all()根本找不到你定义的那个标量summary,生成的summary自然是空的,TensorBoard当然显示"No scalar data was found"。
修正后的代码
把tf.summary.merge_all()移到with g.as_default():的块里面,确保它在目标图的上下文里执行,这样才能收集到正确的summary节点:
import tensorflow as tf tf.reset_default_graph() g = tf.Graph() with g.as_default(): y = tf.Variable(1) initialize = tf.global_variables_initializer() tf.summary.scalar('thing', y) merged = tf.summary.merge_all() # 把这行移到这里! sess = tf.InteractiveSession(graph=g) sess.run(initialize) writer = tf.summary.FileWriter("path", g) for i in range(10): summary = sess.run(merged) writer.add_summary(summary, i) writer.close() # 别忘了关闭writer,确保数据完全写入磁盘 sess.close()
额外要检查的点
- 确认
"path"是一个你有权限写入的有效目录,运行代码后去看看这个目录下有没有生成events.out.tfevents.*格式的文件,如果没有,可能是路径写错或者权限不够。 - 启动TensorBoard的时候,一定要指定正确的日志目录,比如运行
tensorboard --logdir=path,如果是相对路径,要确保你启动TensorBoard的工作目录和代码运行的目录一致。 - 如果你用的是TensorFlow 2.x,虽然这段TF1风格的代码能兼容,但更规范的写法是用
tf.compat.v1模块的对应方法,不过修正位置后在TF1.x环境下肯定能正常跑。
改完之后再运行,TensorBoard的Scalars标签页应该就能看到那10步恒定的thing数据啦!
内容的提问来源于stack exchange,提问作者Kathryn
相关产品推荐
相关产品推荐

