TensorFlow-Importación de datos desde un archivo TFEvent TensorBoard?


He realizado varias sesiones de entrenamiento con diferentes gráficos en TensorFlow. Los resúmenes que he creado muestran resultados interesantes en la formación y validación. Ahora, me gustaría tomar los datos que he guardado en los registros de resumen y realizar un análisis estadístico y, en general, trazar y mirar los datos de resumen de diferentes maneras. ¿Existe alguna forma de acceder fácilmente a estos datos?

Más específicamente, ¿hay alguna forma integrada de leer un registro TFEvent en Python?

Si no hay una manera sencilla de hacer esto, TensorFlow establece que todos sus formatos de archivo son archivos protobuf. Desde mi comprensión de protobufs (que es limitada), creo que sería capaz de extraer estos datos si tengo la especificación del protocolo TFEvent. ¿Hay una manera fácil de conseguir esto? Muchas gracias.

Author: golmschenk, 2016-05-18

5 answers

Como Fabrizio dice, TensorBoard es una gran herramienta para visualizar el contenido de sus registros de resumen. Sin embargo, si desea realizar un análisis personalizado, puede usar tf.train.summary_iterator() función de bucle sobre todo el tf.Event y tf.Summary búferes de protocolo en el registro:

for summary in tf.train.summary_iterator("/path/to/log/file"):
    # Perform custom processing in here.
 18
Author: mrry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:18:13

Para leer un TFEvent puede obtener un iterador de Python que produce búferes de protocolo de eventos.

# 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)

Más información: summary_iterator

 17
Author: Temak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-13 19:23:33

Simplemente puede usar:

tensorboard --inspect --event_file=myevents.out

O si desea filtrar un subconjunto específico de eventos del gráfico:

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

Si desea crear algo más personalizado, puede profundizar en el

/tensorflow/python/summary/event_file_inspector.py 

Para entender cómo analizar los archivos de eventos.

 10
Author: fabrizioM,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-18 17:07:02

Puede usar el script serialize_tensorboard, que tomará un logdir y escribirá todos los datos en formato json.

También puede usar un EventAccumulator para una conveniente API de Python (esta es la misma API que usa TensorBoard).

 5
Author: dandelion,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-24 10:55:56

Aquí hay un ejemplo completo para obtener valores de un escalar. Puede ver la especificación del mensaje para el Evento protobuf message aquí

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)
 2
Author: Duane,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-22 21:57:54