首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tensorboard直方图到matplotlib

Tensorboard直方图到matplotlib
EN

Stack Overflow用户
提问于 2018-02-01 01:19:26
回答 3查看 2.3K关注 0票数 6

我想“丢弃”张力板直方图,并通过matplotlib绘制它们。我会有更多吸引人的科学论文情节。

我设法使用tf.train.summary_iterator破解了摘要文件,并转储了我想转储的直方图( tensorflow.core.framework.summary_pb2.HistogramProto对象)。通过这样做,并实现java脚本代码对数据所做的事情(https://github.com/tensorflow/tensorboard/blob/c2fe054231fe77f3a5b05dbc519f713d2e738d1c/tensorboard/plugins/histogram/tf_histogram_dashboard/histogramCore.ts#L104),我设法获得了与tensorboard图相似(相同的趋势),但不是完全相同的图。

能给我点光吗?

谢谢

EN

回答 3

Stack Overflow用户

发布于 2019-06-19 06:10:54

为了用matplotlib绘制张力板直方图,我做了以下操作:

代码语言:javascript
复制
event_acc = EventAccumulator(path, size_guidance={
    'histograms': STEP_COUNT,
})
event_acc.Reload()
tags = event_acc.Tags()
result = {}
for hist in tags['histograms']:
    histograms = event_acc.Histograms(hist)
    result[hist] = np.array([np.repeat(np.array(h.histogram_value.bucket_limit), np.array(h.histogram_value.bucket).astype(np.int)) for h in histograms])
return result

h.histogram_value.bucket_limit给我这个值,h.histogram_value.bucket给我这个值的计数。因此,当我相应地重复这些值(np.repeat(...))时,我得到了一个预期大小的巨大数组。现在可以使用默认的matplotlib逻辑绘制此数组。

票数 5
EN

Stack Overflow用户

发布于 2019-07-30 17:18:02

最好的解决方案是加载所有事件并重建所有直方图(就像@khuesmann的答案一样),但不要使用EventAccumulator,而要使用EventFileLoader。这将给你一个直方图,每面墙的时间和步长,如Tensorboard图。它可以扩展为按时间步长和墙时间返回操作列表。

不要忘记检查您将使用哪个标记。

代码语言:javascript
复制
from tensorboard.backend.event_processing.event_file_loader import EventFileLoader
# Just in case, PATH_OF_FILE is the path of the file, not the folder
loader = EventFileLoader(PATH_Of_FILE)

# Where to store values
wtimes,steps,actions = [],[],[]
for event in loader.Load():
    wtime   = event.wall_time
    step    = event.step
    if len(event.summary.value) > 0:
        summary = event.summary.value[0]
        if summary.tag == HISTOGRAM_TAG:
            wtimes += [wtime]*int(summary.histo.num)
            steps  += [step] *int(summary.histo.num)

            for num,val in zip(summary.histo.bucket,summary.histo.bucket_limit):
                actions += [val] *int(num)

请记住,tensorflow近似动作并将动作视为连续变量,因此即使您有离散的动作(例如0,1,3),您最终也会得到0.2,0.4,0.9,1.4……在这种情况下,取整的值就可以了。

票数 5
EN

Stack Overflow用户

发布于 2019-07-30 16:03:02

一个很好的解决方案是@khuesmann,但这只允许您检索累积的直方图,而不是每一步的直方图--这是实际显示在tensorboard中的直方图。

如果你想要分布,到目前为止,我所理解的是Tensorboard通常压缩直方图以减少用于存储数据的内存-想象一下存储超过400万步的2D直方图,内存可以快速增加。可以通过执行以下操作访问这些压缩直方图:

代码语言:javascript
复制
from tensorboard.backend.event_processing.event_accumulator import EventAccumulator

n2n = EventAccumulator(PATH)
n2n.Reload()

# Check the tags under histograms and choose the one you want
n2n.Tags()

# This will give you the list used by tensorboard 
# of the compress histograms by timestep and wall time
n2n.CompressedHistograms(HISTOGRAM_TAG)

唯一的问题是它将直方图压缩为5个百分位数(在Basic points中它们是0,668,1587,3085,5000,6915,8413,9332,10000),这对应于(-Inf,-1.5,-1,-0.5,0,0.5,1,1.5,Inf)的标准差。检查代码here

我读得不多,但重建tensorboard显示的时间直方图并不难。如果我找到了一个方法,我会把它贴在这里。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48547914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档