python 同一地块上的多条线与增量记录- wandb

xzlaal3s  于 2023-04-10  发布在  Python
关注(0)|答案(2)|浏览(167)

我正在使用权重和偏差(wandb)。我想在使用增量日志记录的同时将多个图分组为一个,有什么方法可以做到吗?
假设我们有10个指标,我可以逐步将它们添加到项目中,逐步构建10个图表:

import wandb
import math

N_STEPS = 100

wandb.init(project="someProject", name="testMultipleLines")
for epoch in range(N_STEPS):
    log = {}
    log['main_metric'] = epoch / N_STEPS  # some main metric

    # some other metrics I want to have all on 1 plot
    other_metrics = {}
    for j in range(10):
        other_metrics[f'metric_{j}'] = math.sin(j * math.pi * (epoch / N_STEPS))
    log['other_metrics'] = other_metrics

    wandb.log(log)

默认情况下,这在wandb界面上显示为11个不同的图。如何通过API(不使用Web界面)对它们进行分组,以便main_metric在一个图上,而所有other_metrics在第二个图上集中在一起?

6ioyuze2

6ioyuze21#

我认为这可以使用Web界面(通过添加一个面板并使用不同的y键绘制新的图)来完成,但我不确定如何将其集成到代码中。

bejyjqdl

bejyjqdl2#

您可以通过绘制自己的表来完成此操作。
此外,如果您愿意,您还可以将这些指标分组到不同的窗格中,方法是用“/”分隔前缀和指标名称。

import math
import wandb

N_STEPS = 100

wandb.init(project="someProject", name="testMultipleLines")
table = wandb.Table(columns=["metric", "value", "step"])
for epoch in range(N_STEPS):
    log = {}
    log['main/metric'] = epoch / N_STEPS  # some main metric

    # some other metrics I want to have all on 1 plot
    other_metrics = {}
    for j in range(10):
        log[f'other_metrics/metric_{j}'] = math.sin(j * math.pi * (epoch / N_STEPS))
        table.add_data(f'other_metrics/metric_{j}', log[f'other_metrics/metric_{j}'], wandb.run.step)
    wandb.log(log)

wandb.log({"multiline": wandb.plot_table(
    "wandb/line/v0", table, {"x": "step", "y": "value", "groupKeys": "metric"}, {"title": "Multiline Plot"})
})

wandb.finish()

相关问题