在控制台中打印摘要

时间:2016-07-18 22:05:39

标签: python tensorflow protocol-buffers tensorboard

Tensorflow的标量/直方图/ image_summary 函数对于记录数据以便使用tensorboard进行查看非常有用。但我也希望将这些信息打印到控制台(例如,如果我是一个没有桌面环境的疯子)。

目前,我在调用 sess.run 之前将感兴趣的信息添加到获取列表中,但这似乎是多余的,因为我已经获取了合并的摘要。获取合并的摘要会返回一个protobuf,所以我想我可以使用一些通用的python protobuf库来抓它,但这似乎是一个常见的用例,应该有一个更简单的方法。

这里的主要动机是封装。让我留下我的模型和训练脚本在不同的文件中。我的模型有一堆对 tf.scalar_summary 的调用,用于记录有用的信息。理想情况下,我可以通过更改培训脚本中的内容而不更改模型文件来指定是否另外将此信息打印到控制台。目前,我要么将所有有用的信息传递给训练脚本(所以我可以获取它们),或者我通过调用 tf.Print 来模拟模型文件

1 个答案:

答案 0 :(得分:2)

总的来说,在TensorFlow中没有对您的用例的一流支持,因此我将合并的摘要解析回tf.Summary()协议缓冲区,然后根据需要过滤/打印数据。

如果你想出一个漂亮的模式,你可以将它合并回TensorFlow本身。我可以想象在tf.train.SummaryWriter上将它设置为可选设置,但最好只有一个单独的类用于控制台打印有趣的摘要。

如果您想要在图表中编码应该汇总和打印哪些项目,以及哪些项目只应汇总(或设置不同详细级别的系统),您可以使用Collections参数摘要操作构造函数将不同的摘要组织到不同的组中。例如。 loss摘要可以放在集合[GraphKeys.SUMMARIES, 'ALWAYS_PRINT']中,但另一个摘要可以放在集合[GraphKeys.SUMMARIES, 'PRINT_IF_VERBOSE']等中。然后,您可以针对不同类型的打印使用不同的merge_summary操作,并控制哪些通过命令行标志运行。