在运行结束之前,如何从wandb中检索记录值?
import os
import wandb
wandb.init(project='someproject')
def loss_a():
# do_stuff and log:
wandb.log({"loss_a": 1.0})
def loss_b():
# do_stuff and log:
wandb.log({"loss_b": 2.0})
for epoch in range(2):
loss_a()
loss_b()
# somehow retrieve loss_a and loss_b and print them here:
print(f'loss_a={??}, loss_b={??}')运行完成后,我可以使用wandb.Api找到它来获取run.history。但在run完成之前,访问run.history似乎不起作用。
发布于 2021-02-02 00:26:12
在运行结束之前,您可以使用wandb.run.summary从wandb检索一个记录值。它是一个字典,用来保存为特定键名记录的最后一个值。看看这个link。
您也可以查看此colab notebook以亲自尝试。
import os
import wandb
wandb.init(project='someproject')
def loss_a():
# do_stuff and log:
wandb.log({"loss_a": 1.0})
def loss_b():
# do_stuff and log:
wandb.log({"loss_b": 2.0})
for epoch in range(2):
loss_a()
loss_b()
# somehow retrieve loss_a and loss_b and print them here:
print(f'loss_a={wandb.run.summary["loss_a"]}, loss_b={wandb.run.summary["loss_b"]}')发布于 2020-12-28 08:19:33
查看源代码,run.history只会在history._data中暂时保存数据。正如您在this particular line上看到的,包含日志的字典在调用回调后立即被清除(我猜这相当于通过http将数据发送到服务器)。
作为一种解决办法,您可以返回loss_a和loss_b的损失,并同时记录它们。这实际上具有在相同的时间步长上记录这两个损失的好处:
def loss_a():
# do_stuff and log:
return 1.0
def loss_b():
# do_stuff and log:
return 2.0
for epoch in range(2):
a = loss_a()
b = loss_b()
print(f'loss_a={a}, loss_b={b}')
wandb.log({"loss_a": a, "loss_b": b})这也是一个从wandb中解耦代码的好方法!
https://stackoverflow.com/questions/65392269
复制相似问题