首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >wandb -在运行时访问记录值

wandb -在运行时访问记录值
EN

Stack Overflow用户
提问于 2020-12-21 19:51:10
回答 2查看 132关注 0票数 0

在运行结束之前,如何从wandb中检索记录值?

代码语言:javascript
复制
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似乎不起作用。

EN

回答 2

Stack Overflow用户

发布于 2021-02-02 00:26:12

在运行结束之前,您可以使用wandb.run.summary从wandb检索一个记录值。它是一个字典,用来保存为特定键名记录的最后一个值。看看这个link

您也可以查看此colab notebook以亲自尝试。

代码语言:javascript
复制
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"]}')
票数 2
EN

Stack Overflow用户

发布于 2020-12-28 08:19:33

查看源代码,run.history只会在history._data中暂时保存数据。正如您在this particular line上看到的,包含日志的字典在调用回调后立即被清除(我猜这相当于通过http将数据发送到服务器)。

作为一种解决办法,您可以返回loss_aloss_b的损失,并同时记录它们。这实际上具有在相同的时间步长上记录这两个损失的好处:

代码语言:javascript
复制
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中解耦代码的好方法!

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

https://stackoverflow.com/questions/65392269

复制
相关文章

相似问题

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