TensorFlow-importer des données d'un fichier TensorBoard?
j'ai effectué plusieurs sessions de formation avec différents graphes dans TensorFlow. Les résumés j'ai configuré montrent des résultats intéressants dans la formation et la validation. Maintenant, j'aimerais prendre les données que j'ai enregistrées dans les journaux de synthèse et effectuer quelques analyses statistiques et en général tracer et regarder les données de synthèse de différentes façons. Est-il un moyen d'accéder facilement à ces données?
plus précisément, y a-t-il une manière construite pour lire un enregistrement TFEvent de retour dans Python?
Si il n'y a pas de moyen simple de le faire, TensorFlow déclare que tous ses formats de fichiers sont des fichiers protobuf. D'après ma compréhension de protobufs (qui est limitée), je pense que je serais en mesure d'extraire ces données si j'ai la spécification de protocole TFEvent. Y a-t-il un moyen facile de mettre la main dessus? Je vous remercie beaucoup.
5 réponses
Comme Fabrizio dit, TensorBoard est un excellent outil permettant de visualiser le contenu de votre récapitulatif de journaux. Cependant, si vous souhaitez effectuer une analyse personnalisée, vous pouvez utiliser tf.train.summary_iterator()
fonction pour boucler tout le tf.Event
et tf.Summary
tampons de protocole dans le log:
for summary in tf.train.summary_iterator("/path/to/log/file"):
# Perform custom processing in here.
pour lire un TFEvent, vous pouvez obtenir un itérateur Python qui fournit des tampons de protocole D'événement.
# 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)
plus d'info: summy_iterator
Vous pouvez simplement utiliser:
tensorboard --inspect --event_file=myevents.out
ou si vous souhaitez filtrer un sous-ensemble spécifique des événements du graphique:
tensorboard --inspect --event_file=myevents.out --tag=loss
Si vous voulez créer quelque chose de plus personnalisé, vous pouvez creuser dans le
/tensorflow/python/summary/event_file_inspector.py
pour comprendre comment analyser les fichiers événement.
Vous pouvez utiliser le script serialize_tensorboard, qui prendra un logdir et écrira toutes les données dans le format json.
vous pouvez aussi utiliser un accumulateur D'événements pour une API Python pratique (C'est la même API que TensorBoard utilise).
Voici un exemple complet pour l'obtention de valeurs à partir d'un scalaire. Vous pouvez voir la spécification de message pour le message protobuf Event ici
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)