有没有办法在tensorflow上显示多个不同运行的平均值? 我只能在同一个图表上看到它们(通过发送不同运行的路径),但我想在图表上看到它们的平均值
答案 0 :(得分:2)
请按照issue 376查看相关进展。这是一个活跃的功能请求,在上个月有一些进展,但截至目前,没有办法做你想要的。爱好。
答案 1 :(得分:2)
正如@dga所说,这还没有实现。以下是一些使用EventAccumulator
来组合标量张量流汇总值的代码。这可以扩展到适应其他摘要类型。
import os
from collections import defaultdict
import numpy as np
import tensorflow as tf
from tensorboard.backend.event_processing.event_accumulator import EventAccumulator
def tabulate_events(dpath):
summary_iterators = [EventAccumulator(os.path.join(dpath, dname)).Reload() for dname in os.listdir(dpath)]
tags = summary_iterators[0].Tags()['scalars']
for it in summary_iterators:
assert it.Tags()['scalars'] == tags
out = defaultdict(list)
for tag in tags:
for events in zip(*[acc.Scalars(tag) for acc in summary_iterators]):
assert len(set(e.step for e in events)) == 1
out[tag].append([e.value for e in events])
return out
def write_combined_events(dpath, d_combined, dname='combined'):
fpath = os.path.join(dpath, dname)
writer = tf.summary.FileWriter(fpath)
tags, values = zip(*d_combined.items())
timestep_mean = np.array(values).mean(axis=-1)
for tag, means in zip(tags, timestep_mean):
for i, mean in enumerate(means):
summary = tf.Summary(value=[tf.Summary.Value(tag=tag, simple_value=mean)])
writer.add_summary(summary, global_step=i)
writer.flush()
dpath = '/path/to/root/directory'
d = tabulate_events(dpath)
write_combined_events(dpath, d)
此解决方案采用如下目录结构:
dpath
├── 1
│ └── events.out.tfevents.1518552132.Alexs-MacBook-Pro-2.local
├── 11
│ └── events.out.tfevents.1518552180.Alexs-MacBook-Pro-2.local
├── 21
│ └── events.out.tfevents.1518552224.Alexs-MacBook-Pro-2.local
├── 31
│ └── events.out.tfevents.1518552264.Alexs-MacBook-Pro-2.local
└── 41
└── events.out.tfevents.1518552304.Alexs-MacBook-Pro-2.local
答案 2 :(得分:1)
由于仍然没有内置功能可以执行此操作,因此我为此发布了一个工具:
https://github.com/Spenhouet/tensorboard-aggregator
此工具可以按其最大,最小,均值,中位数和标准偏差汇总多个张量板运行。聚合要么保存在新的张量板摘要中,要么保存为_raw_delete()
文件。
答案 3 :(得分:1)
我创建了 TensorBoard Reducer 来使用 PyTorch 来做到这一点。无需安装 TensorFlow。
pip install tensorboard-reducer
tb-reducer -i 'glob_pattern/of_dirs_to_reduce*' -o output_dir -r mean,std,min,max
-i/--indirs-glob
(必需):要减少的运行目录的全局模式。-o/--outdir
(必需):保存新事件文件的目录名称。-r/--reduce-ops
(可选,默认值:mean
):numpy 缩减操作的逗号分隔名称(mean
、std
、{{ 1}}、min
、...)。每个归约都被写入一个单独的 max
,并以其操作名称为后缀,例如如果 outdir
,则平均减少量将写入 outdir='my-new-run
。聚合结果可以作为新的 TensorBoard 事件文件或 CSV 保存到磁盘。