TensorFlow-импорт данных из файла TensorBoard TFEvent?

Я провел несколько учебных занятий с различными графиками в TensorFlow. Резюме, которые я настроил, показывают интересные результаты в обучении и проверке. Теперь я хотел бы взять данные, которые я сохранил в сводных журналах, и выполнить статистический анализ и в целом построить график и посмотреть на сводные данные по-разному. Существует ли способ, чтобы легко получить доступ к этим данным?

более конкретно, есть ли встроенный способ прочитать запись TFEvent обратно в В Python?

Если нет простого способа сделать это,TensorFlow заявляет, что все его форматы файлов являются файлами protobuf. Из моего понимания protobufs (которое ограничено), я думаю, что смогу извлечь эти данные, если у меня есть спецификация протокола TFEvent. Есть ли простой способ получить это? Спасибо.

5 ответов


Как Фабрицио говорит, TensorBoard-отличный инструмент для визуализации содержимого ваших сводных журналов. Однако, если вы хотите выполнить пользовательский анализ, вы можете использовать tf.train.summary_iterator() функция для петли над всеми tf.Event и tf.Summary буфера протокола в журнале:

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

для чтения 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


вы можете просто использовать:

tensorboard --inspect --event_file=myevents.out

или если вы хотите отфильтровать определенное подмножество событий графика:

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

Если вы хотите создать что-то более настраиваемое, вы можете порыться в

/tensorflow/python/summary/event_file_inspector.py 

чтобы понять, как анализировать файлы событий.


вы можете использовать скрипт serialize_tensorboard, который будет принимать logdir и записывать все данные в формате json.

вы также можете использовать EventAccumulator для удобного API Python (это тот же API, который использует TensorBoard).


вот полный пример получения значений из скаляра. Вы можете увидеть спецификацию сообщения для события protobuf message здесь

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)