TensorFlow-从TensorBoard TFEvent文件导入数据吗?
python
tensorboard
tensorflow
6
0

我在TensorFlow中使用不同的图形进行了几次训练。我设置的摘要在训练和验证中显示出有趣的结果。现在,我想获取保存在摘要日志中的数据,并进行一些统计分析,并以一般方式进行绘制,并以不同的方式查看摘要数据。是否有任何现有方法可以轻松访问此数据?

更具体地说,是否有任何内置方法可以将TFEvent记录读回Python?

如果没有简单的方法可以执行此操作, TensorFlow会指出其所有文件格式均为protobuf文件 。从对protobufs的理解(有限)来看,如果我具有TFEvent协议规范,我认为我可以提取这些数据。有一个简单的方法来解决这个问题吗?非常感谢

参考资料:
Stack Overflow
收藏
评论
共 6 个回答
高赞 时间 活跃

您可以简单地使用:

tensorboard --inspect --event_file=myevents.out

或者如果您要过滤图的特定事件子集:

tensorboard --inspect --event_file=myevents.out --tag=loss

如果您想创建更多自定义内容,可以深入了解

/tensorflow/python/summary/event_file_inspector.py 

了解如何解析事件文件。

收藏
评论

这是一个用于从标量获取值的完整示例。您可以在此处查看 Event protobuf消息的消息规范

import tensorflow as tf


for event in tf.train.summary_iterator('runs/easy_name/events.out.tfevents.1521590363.DESKTOP-43A62TM'):
    for value in event.summary.value:
        print(value.tag)
        if value.HasField('simple_value'):
            print(value.simple_value)
收藏
评论

从tensorflow版本2.0.0-beta1以下工作:

import os

import tensorflow as tf
from tensorflow.python.framework import tensor_util

summary_dir = 'tmp/summaries'
summary_writer = tf.summary.create_file_writer('tmp/summaries')

with summary_writer.as_default():
  tf.summary.scalar('loss', 0.1, step=42)
  tf.summary.scalar('loss', 0.2, step=43)
  tf.summary.scalar('loss', 0.3, step=44)
  tf.summary.scalar('loss', 0.4, step=45)


from tensorflow.core.util import event_pb2
from tensorflow.python.lib.io import tf_record

def my_summary_iterator(path):
    for r in tf_record.tf_record_iterator(path):
        yield event_pb2.Event.FromString(r)

for filename in os.listdir(summary_dir):
    path = os.path.join(summary_dir, filename)
    for event in my_summary_iterator(path):
        for value in event.summary.value:
            t = tensor_util.MakeNdarray(value.tensor)
            print(value.tag, event.step, t, type(t))

my_summary_iterator的代码是从tensorflow.python.summary.summary_iterator.py复制的-无法在运行时导入它。

收藏
评论

就像Fabrizio 所说的那样 ,TensorBoard是一个很好的工具,用于可视化摘要日志的内容。但是,如果要执行自定义分析,则可以使用tf.train.summary_iterator()函数遍历日志中的所有tf.Eventtf.Summary协议缓冲区:

for summary in tf.train.summary_iterator("/path/to/log/file"):
    # Perform custom processing in here.

tf2的更新:

from tensorflow.python.summary.summary_iterator import summary_iterator

您需要导入它,默认情况下当前未导入该模块级别。在2.0.0-rc2上

收藏
评论

您可以使用脚本serialize_tensorboard ,该脚本将获取一个logdir并以json格式写出所有数据。

您还可以将EventAccumulator用于便捷的Python API(这与TensorBoard使用的API相同)。

收藏
评论

要读取TFEvent,您可以获取产生事件协议缓冲区的Python迭代器。

# This example supposes that the events file contains summaries with a
# summary value tag 'loss'.  These could have been added by calling
# `add_summary()`, passing the output of a scalar summary op created with
# with: `tf.scalar_summary(['loss'], loss_tensor)`.
for e in tf.train.summary_iterator(path_to_events_file):
    for v in e.summary.value:
        if v.tag == 'loss' or v.tag == 'accuracy':
            print(v.simple_value)

更多信息: summary_iterator

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号