将图像摘要输出到Tensorboard

时间:2017-12-06 18:00:40

标签: python tensorflow tensorboard

我正在尝试使用this code可视化卷积图层的过滤器,但无法将图像写入我的摘要文件。我有输出的标量没有问题,我试图修改代码以添加图像如下

summary = tf.Summary()
summary.value.add(tag='Perf/Reward', simple_value=float(mean_reward))
summary.value.add(tag='Perf/Length', simple_value=float(mean_length))
with tf.variable_scope(self.name + "/conv1", reuse=True):
    weights = tf.get_variable("weights")
    grid = put_kernels_on_grid(weights)
    image = tf.summary.image('conv1/weights', grid, max_outputs=1)
    summary.value.add(tag='conv1/weights', image=image)
self.summary_writer.add_summary(summary, episode_count)

只有标量,这样可以正常工作,但添加图像会产生错误

TypeError: Parameter to MergeFrom() must be instance of same class: expected Image got Tensor. for field Value.image

我还尝试通过将代码更改为

来直接添加图像摘要
summary = tf.Summary()
summary.value.add(tag='Perf/Reward', simple_value=float(mean_reward))
summary.value.add(tag='Perf/Length', simple_value=float(mean_length))
with tf.variable_scope(self.name + "/conv1", reuse=True):
    weights = tf.get_variable("weights")
    grid = put_kernels_on_grid(weights)
    image = tf.summary.image('conv1/weights', grid, max_outputs=1)
    self.summary_writer.add_summary(image, episode_count)
self.summary_writer.add_summary(summary, episode_count)

但得到了错误

AttributeError: 'Tensor' object has no attribute 'value'

将图像输出到摘要文件的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

put_kernels_on_grid正在回归张量;通过' image'我认为作者只是意味着您可以将其打印出来以查看内核的外观。尝试使用tf.summary.tensor_summary

哎呀,抱歉。我已经能够使用以下方法将张量保存为图像:

import tensorflow as tf
import numpy as np

batch_xs = np.ones((100, 100, 1)) * 200
init = tf.constant(batch_xs, dtype=tf.uint8)
grid = tf.get_variable('var_name', dtype=tf.uint8, initializer=init)

encoded_image = tf.image.encode_jpeg(grid)

fwrite = tf.write_file("junk.jpeg", encoded_image)
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    result = sess.run(fwrite)

但是tf.image.encode_jpeg仍会返回带有DataType字符串的张量,因此tf.summary.image不会接受它。您之前使用的代码早于TensorFlow 1.0,因此它绝对无法按照书面形式运行。

希望这有点帮助。