web-dev-qa-db-fra.com

Comment lisez-vous les fichiers Tensorboard par programmation?

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

24
mikal94305

Vous pouvez utiliser les classes ou le script Python de TensorBoard pour extraire les données:

Comment puis-je exporter des données depuis TensorBoard?

Si vous souhaitez exporter des données pour les visualiser ailleurs (par exemple, iPython Notebook), c'est également possible. Vous pouvez dépendre directement des classes sous-jacentes que TensorBoard utilise pour charger les données: python/summary/event_accumulator.py (pour charger des données à partir d'une seule exécution) ou python/summary/event_multiplexer.py (pour charger les données de plusieurs exécutions et les organiser). Ces classes chargent des groupes de fichiers d'événements, suppriment les données qui étaient "orphelines" par les plantages de TensorFlow et organisent les données par balise.

Comme autre option, il existe un script (tensorboard/scripts/serialize_tensorboard.py) qui chargera un fichier journal comme TensorBoard, mais écrit toutes les données sur le disque en tant que json au lieu de démarrer un serveur. Ce script est configuré pour créer de "faux backends TensorBoard" pour les tests, il est donc un peu rude sur les bords.

En utilisant EventAccumulator :

# In [1]: from tensorflow.python.summary import event_accumulator  # deprecated
In [1]: from tensorboard.backend.event_processing 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.
29
user1501961

Pour terminer 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')

6
mikal94305