TensorFlow FileWriter写入异常:TensorBoard提示无图像数据
排查TensorBoard不显示Matplotlib图片的问题
我帮你分析了代码,找到了两个核心问题,导致TensorBoard无法识别图片数据:
1. 未明确指定图片保存格式为PNG
TensorBoard仅支持PNG格式的图片数据,但你调用plt.savefig(s)时,因为没有指定文件名,Matplotlib无法自动推断格式(部分环境可能默认PNG,但存在兼容性风险),导致编码后的图片数据无法被TensorBoard解析。
2. 复用同一个tf.Summary对象导致数据异常
你在循环外创建了唯一的summary = tf.Summary(),每次循环都往这个对象里追加新的图片数据,再写入TensorBoard。这种复用会让每次写入的summary包含之前所有图片的信息,干扰TensorBoard的解析逻辑。
修改后的可运行代码
import numpy as np import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt import tensorflow as tf import io class bla(): def __init__(self, sess): self.sess = sess class Dummy(): def __init__(self, sess): self.fill_scheme = { 'adv': np.linspace(0, 20), 'butt': np.linspace(0, 20) * -1 } self.model = bla(sess) def test(self, name=100): checker = hasattr(self.model, 'sess') writer = tf.summary.FileWriter('./im_data', graph=None if not checker else self.model.sess.graph) for k, v in self.fill_scheme.items(): # 每次循环创建全新的Summary对象,避免数据累积 summary = tf.Summary() # 使用with语句自动管理figure生命周期,无需手动关闭 with plt.figure(): plt.plot(v) s = io.BytesIO() # 明确指定保存为PNG格式,适配TensorBoard要求 plt.savefig(s, format='png') img_summary = tf.Summary.Image(encoded_image_string=s.getvalue()) summary.value.add(tag='im/it_{}_{}'.format(name, k), image=img_summary) writer.add_summary(summary, name) writer.close() sess = tf.InteractiveSession() a = Dummy(sess) a.test()
额外优化提示
- 用
with plt.figure()替代手动创建和清理figure,既简洁又能避免内存泄漏。 - 如果你的环境是TensorFlow 2.x,建议迁移到
tf.summary.create_file_writer+tf.summary.image的现代API,但上述修改完全适配你当前的TF 1.x风格代码。
修改后重新运行代码,再启动TensorBoard指定logdir=./im_data,就能看到两张折线图了。
内容的提问来源于stack exchange,提问作者IanQ
相关产品推荐
相关产品推荐

