Comment lire les fichiers Tensorboard par programmation?

Comment Pouvez-vous écrire un script python pour lire les fichiers de log de Tensorboard, extraire la perte et la précision et d'autres données numériques, sans lancer l'interface graphique tensorboard --logdir=...?

17
demandé sur mikal94305 2016-12-10 13:53:04

2 réponses

vous pouvez utiliser les classes ou le script Python de Tensorbord pour extraire les données:

Comment puis-je exporter des données à partir de TensorBoard?

si vous souhaitez exporter des données pour les visualiser ailleurs (par exemple IPython Notebook), c'est aussi possible. Vous pouvez directement dépendre des classes sous-jacentes que TensorBoard utilise pour le chargement des données:python/summary/event_accumulator.py (pour le chargement de données à partir d'un seul terme) ou python/summary/event_multiplexer.py (pour charger des données à partir de plusieurs passages, et les garder organisées). Ces classes chargent des groupes de fichiers d'événements, rejettent des données qui étaient "orphelines" par des crashs de TensorFlow, et organisent les données par tag.

comme autre option, il y a un script (tensorboard/scripts/serialize_tensorboard.py) qui chargera un logdir comme Tensorbord le fait, mais écrira toutes les données sur le disque comme json au lieu de démarrer un serveur. Ce script est configuré pour faire des" faux backends de TensorBoard " pour les tests, donc il est un peu rugueux sur les bords.

à l'Aide de EventAccumulator:

In [1]: from tensorflow.python.summary import event_accumulator

In [2]: ea = event_accumulator.EventAccumulator('events.out.tfevents.x.ip-x-x-x-x',
   ...:  size_guidance={ # see below regarding this argument
   ...:      event_accumulator.COMPRESSED_HISTOGRAMS: 500,
   ...:      event_accumulator.IMAGES: 4,
   ...:      event_accumulator.AUDIO: 4,
   ...:      event_accumulator.SCALARS: 0,
   ...:      event_accumulator.HISTOGRAMS: 1,
   ...:  })

In [3]: ea.Reload() # loads events from file
Out[3]: <tensorflow.python.summary.event_accumulator.EventAccumulator at 0x7fdbe5ff59e8>

In [4]: ea.Tags()
Out[4]: 
{'audio': [],
 'compressedHistograms': [],
 'graph': True,
 'histograms': [],
 'images': [],
 'run_metadata': [],
 'scalars': ['Loss', 'Epsilon', 'Learning_rate']}

In [5]: ea.Scalars('Loss')
Out[5]: 
[ScalarEvent(wall_time=1481232633.080754, step=1, value=1.6365480422973633),
 ScalarEvent(wall_time=1481232633.2001867, step=2, value=1.2162202596664429),
 ScalarEvent(wall_time=1481232633.3877788, step=3, value=1.4660096168518066),
 ScalarEvent(wall_time=1481232633.5749283, step=4, value=1.2405034303665161),
 ScalarEvent(wall_time=1481232633.7419815, step=5, value=0.897326648235321),
 ...]

size_guidance:

size_guidance: Information on how much data the EventAccumulator should
  store in memory. The DEFAULT_SIZE_GUIDANCE tries not to store too much
  so as to avoid OOMing the client. The size_guidance should be a map
  from a `tagType` string to an integer representing the number of
  items to keep per tag for items of that `tagType`. If the size is 0,
  all events are stored.
20
répondu user1501961 2018-09-20 02:03:10

pour finir la réponse de user1501961, vous pouvez alors simplement exporter la liste des scalaires vers un fichier csv facilement avec pandas pd.DataFrame(ea.Scalars('Loss)).to_csv('Loss.csv')

3
répondu mikal94305 2017-06-13 18:59:09