我正在尝试使用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'
将图像输出到摘要文件的正确方法是什么?
答案 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,因此它绝对无法按照书面形式运行。
希望这有点帮助。