如何编写一个Python脚本来读取Tensorboard日志文件,提取损失和准确率等数值数据,而不需要启动GUI tensorboard --logdir=...
?
回答:
您可以使用TensorBoard的Python类或脚本来提取数据:
如果您想将数据导出到其他地方进行可视化(例如iPython Notebook),这是可行的。您可以直接依赖TensorBoard用于加载数据的底层类:
python/summary/event_accumulator.py
(用于从单个运行中加载数据)或python/summary/event_multiplexer.py
(用于从多个运行中加载数据,并保持数据有序)。这些类加载一组事件文件,丢弃由TensorFlow崩溃导致的“孤立”数据,并按标签组织数据。另一个选项是使用脚本(
tensorboard/scripts/serialize_tensorboard.py
),该脚本会像TensorBoard一样加载日志目录,但会将所有数据以json格式写入磁盘,而不是启动服务器。此脚本的设置是为了制作“伪TensorBoard后端”用于测试,因此在某些方面可能有些粗糙。
使用 EventAccumulator
:
# In [1]: from tensorflow.python.summary import event_accumulator # 已废弃In [1]: from tensorboard.backend.event_processing import event_accumulatorIn [2]: ea = event_accumulator.EventAccumulator('events.out.tfevents.x.ip-x-x-x-x', ...: size_guidance={ # 关于此参数的详细信息见下文 ...: 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() # 从文件中加载事件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: 关于EventAccumulator应在内存中存储多少数据的信息。DEFAULT_SIZE_GUIDANCE尝试不存储过多数据,以避免客户端内存溢出。size_guidance应为一个映射,从`tagType`字符串到一个整数,表示每个标签应保留的该`tagType`项目的数量。如果大小为0,则所有事件都会被存储。