使用 WandB 而不是单独的图来获取每个时期的对齐 val_loss 和 train_loss 图

Mon*_*lal 2 python machine-learning deep-learning wandb

我有以下代码,用于使用 WandB API 记录每个时期的训练和验证损失。但我不确定为什么我没有在同一时期得到 val 损失和训练损失。知道如何解决这个问题吗?

wandb.log({"train loss": train_epoch_loss,
           "val loss": val_epoch_loss,
           "epoch": epoch})

wandb.log({"train acc": train_epoch_acc,
           "val acc": val_epoch_acc,
           "epoch": epoch})

wandb.log({"best val acc": best_acc, "epoch": epoch})
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如您所见,val 损失与历元和训练损失与历元是两个完全独立的实体,而我希望将它们都放在 WandB 的一个图中。 在此输入图像描述

在此输入图像描述

小智 6

我在权重与偏差工作,很乐意提供帮助:

同一张图表上有 2 个指标

要在同一图表上绘制 2 个指标,您可以单击图表中的铅笔图标进行编辑,然后向 y 轴添加其他指标,如下所示。

在此输入图像描述

更改默认 x 轴

您还可以更改 X 轴以针对“epoch”而不是默认的 wandb 进行绘图step。如果默认情况下您希望这种行为,您可以wandb.define_metric在开始训练之前调用一次并将 x 轴设置为epoch。有关更多信息,请参阅Define_metric文档

记录步骤

需要注意的一件事是,当您记录验证指标时,您希望它们与训练指标在同一步骤中记录。在这种情况下,你可以这样做:

metrics = {}

for step, batch in my_data:
  ...
  
  train_loss = ....

  metrics['train_loss'] = train_loss

  if step % val_steps == 0:
    val_loss = ...
  
    metrics['val_loss'] = val_loss
  
    wandb.log(metrics)

  else:
    wandb.log(metrics)
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用commit=False参数inwandb.log来存储指标,而不增加 wandb 步骤。然后wandb.log()在需要时调用以增加步骤。