如何手动创建tf.Summary()

时间:2016-06-19 00:02:24

标签: tensorflow

我经常想记录python变量 - 而不是tf张量。

在文档中,它说“你可以传递一个用你自己的数据填充的tf.Summary协议缓冲区”但是没有tf.Summary的文档,我无法弄清楚如何使用它

任何人都知道如何以这种方式创建标量摘要?

3 个答案:

答案 0 :(得分:56)

您可以在Python程序中创建一个tf.Summary对象,并将其写入使用tf.summary.FileWriter方法获取TensorFlow生成的摘要的同一SummaryWriter.add_summary()对象。

tf.Summary类是Python protocol buffer wrapperthe Summary protocol buffer。每个Summary都包含一个tf.Summary.Value协议缓冲区列表,每个缓冲区都有一个标记和一个“简单”(浮点标量)值,image,一个{{3} }或histogram。例如,您可以从Python对象生成标量摘要,如下所示:

writer = tf.train.SummaryWriter(...)
value = 37.0
summary = tf.Summary(value=[
    tf.Summary.Value(tag="summary_tag", simple_value=value), 
])
writer.add_summary(summary)

答案 1 :(得分:6)

如果要记录python值,则必须创建一个占位符,在运行tf.Summary操作时必须输入。

这是一段代码剪切

value_ = tf.placeholder(tf.float32, [])
summary_op = tf.scalar_summary("value_log", value_)
my_python_variable = 10
# define everything else you need...
# ...
with tf.Session() as sess:
    for i in range(0, 10):
        sess.run(summary_op, feed_dict={value_: my_python_variable*i})

答案 2 :(得分:3)

我需要在培训期间对自定义汇总变量进行许多更新,所以我实现了我的如下:

在循环之前:

writer = tf.summary.FileWriter(log_folder)
accuracy = None
accuracy_summary = tf.Summary()
accuracy_summary.value.add(tag='accuracy', simple_value=accuracy)

循环内部:

if i%20000 == 0:
    accuracy = get_accuracy()
    accuracy_summary.value[0].simple_value = accuracy
    writer.add_summary(accuracy_summary, i)

我假设value的索引符合变量添加到摘要的顺序。