Как программно читать файлы Tensorboard?


Как можно написать скрипт python для чтения файлов журналов Tensorboard, извлечения потерь и точности и других числовых данных, не запуская графический интерфейс tensorboard --logdir=...?

2 17

2 ответа:

Вы можете использовать классы Python или скрипт TensorBoard для извлечения данных:

Как я могу экспортировать данные из TensorBoard?

Если вы хотите экспортировать данные для визуализации в другом месте (например, IPython Notebook), это тоже возможно. Вы можете напрямую зависеть от базовых классов, которые TensorBoard использует для загрузки данных: python/summary/event_accumulator.py (для загрузки данных из одного запуска) или python/summary/event_multiplexer.py (для загрузки данных из нескольких запусков и сохранения их упорядоченности). Эти классы загружают группы файлы событий, отбрасывают данные, которые были "осиротевшими" в результате сбоев TensorFlow, и упорядочивают данные по тегам.

Как еще один вариант, есть скрипт (tensorboard/scripts/serialize_tensorboard.py), который загрузит logdir так же, как это делает TensorBoard, но запишет все данные на диск как json вместо запуска сервера. Этот сценарий настроен на создание "поддельных тензорных бэкендов" для тестирования, поэтому он немного груб по краям.

Использование 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.

Чтобы закончить ответ user1501961, вы можете просто экспортировать список скаляров в csv-файл с помощью pandas pd.DataFrame(ea.Scalars('Loss)).to_csv('Loss.csv')