Tensorflow 的标量/直方图/image_summary 函数对于记录数据以便使用张量板查看非常有用。但我也希望将这些信息打印到控制台(例如,如果我是一个没有桌面环境的疯狂人)。
目前,我在调用 sess.run 之前将感兴趣的信息添加到获取列表中,但这似乎是多余的,因为我已经在获取合并的摘要了。获取合并的摘要会返回一个 protobuf,所以我想我可以使用一些通用的 python protobuf 库来抓取它,但这似乎是一个足够常见的用例,应该有一种更简单的方法。
这里的主要动机是封装。让我们留下我的模型和训练脚本在不同的文件中。我的模型对 tf.scalar_summary 进行了大量调用,以获取对记录有用的信息。理想情况下,我能够通过更改训练脚本中的某些内容来指定是否额外将此信息打印到控制台而不更改模型文件。目前,我要么将所有有用的信息传递给训练脚本(这样我就可以获取它们),要么在模型文件中调用 tf.Print
最佳答案
总的来说,TensorFlow 中没有对您的用例的一流支持,因此我会将合并的摘要解析回 tf.Summary() Protocol Buffer ,然后根据您的需要过滤/打印数据。
如果您想出了一个不错的模式,您可以将其合并回 TensorFlow 本身。我可以想象将其作为 tf.train.SummaryWriter 上的可选设置,但最好只有一个单独的类用于控制台打印出有趣的摘要。
如果您想将哪些项目应汇总和打印以及哪些项目仅应汇总(或设置不同详细级别的系统)编码到图表本身中,您可以使用Collections
摘要操作构造函数的参数,用于将不同的摘要组织到不同的组中。例如。 loss
摘要可以放入集合 [GraphKeys.SUMMARIES, 'ALWAYS_PRINT']
中,但另一个摘要可以放入集合 [GraphKeys.SUMMARIES, 'PRINT_IF_VERBOSE' ]
等。然后,您可以针对不同类型的打印使用不同的 merge_summary
操作,并通过命令行标志控制运行哪些操作。
关于python - 在控制台中打印出摘要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38446706/