Git Product home page Git Product logo

Comments (8)

yhcc avatar yhcc commented on August 17, 2024

感谢您的提问。metric.log中的数据是用来画图的,传给fitlog.add_best_metric()接口才是用来显示到表格中的。这里是由于(1)有时候比较难判断metric中哪个值是需要优化的(而且有时候是越大越好有时候越小越好),所以fitlog没法(因为我懒)实现自动抓取最好的那次记录;(2)有时候记录的时候可能同时存在多个metric(例如即有dev集也有test集的结果),需要按照dev集选择对应epoch的test集的结果。fitlog.add_best_metric()这个接口永远都只选择最近一次输入给它的结果,一个使用例子是

# 我就只写训练循环这部分的代码了
best_dev_acc = -1
for i in range(1, n_epochs):
  for x,y in dataset:
      # training loop
  dev_acc, test_acc = GetEvaluationResult()
  fitlog.add_metric(name='dev', value=dev_acc, step=i*num_step_per_epoch, epoch=i)
  fitlog.add_metric(name='test', value=test_acc, step=i*num_step_per_epoch, epoch=i)
  if best_dev_acc<dev_acc:
     fitlog.add_best_metric(name='dev', value=dev_acc)
     fitlog.add_best_metric(name='test', value=test_acc)   #  这样前端显示的test acc对应的就是dev最佳时的结果
     best_dev_acc = dev_acc

from fitlog.

fengxyStar avatar fengxyStar commented on August 17, 2024

感谢您的提问。metric.log中的数据是用来画图的,传给fitlog.add_best_metric()接口才是用来显示到表格中的。这里是由于(1)有时候比较难判断metric中哪个值是需要优化的(而且有时候是越大越好有时候越小越好),所以fitlog没法(因为我懒)实现自动抓取最好的那次记录;(2)有时候记录的时候可能同时存在多个metric(例如即有dev集也有test集的结果),需要按照dev集选择对应epoch的test集的结果。fitlog.add_best_metric()这个接口永远都只选择最近一次输入给它的结果,一个使用例子是

# 我就只写训练循环这部分的代码了
best_dev_acc = -1
for i in range(1, n_epochs):
  for x,y in dataset:
      # training loop
  dev_acc, test_acc = GetEvaluationResult()
  fitlog.add_metric(name='dev', value=dev_acc, step=i*num_step_per_epoch, epoch=i)
  fitlog.add_metric(name='test', value=test_acc, step=i*num_step_per_epoch, epoch=i)
  if best_dev_acc<dev_acc:
     fitlog.add_best_metric(name='dev', value=dev_acc)
     fitlog.add_best_metric(name='test', value=test_acc)   #  这样前端显示的test acc对应的就是dev最佳时的结果
     best_dev_acc = dev_acc

感谢回答!我了解为什么表格里没有add_metric记录的数据了,但还有一个问题:如果metric.log中的数据是用来画图的,而且我的metric.log里也有数据,但为什么我点击右上角对比画图选项的时候(我是想实现首页展示的“支持多条log的metric收敛曲线对比”的功能),会出现如下的情况:

  1. 能选择的指标只有best_map,没有我每一epoch记录的map、topkmap等

屏幕快照 2020-07-25 下午4 38 36

2.就算选择best_map进行画图后,还会出现

屏幕快照 2020-07-25 下午4 38 40

from fitlog.

yhcc avatar yhcc commented on August 17, 2024

第一个问题算是功能性失误(我没考虑到有时候某些metric可能会不显示到前端这个场景),就是只能选择暴露在table之中的metric;第二个问题,是之前实现的时候的一个bug,我最近似乎是修复了,您尝试通过pip install git+https://github.com/fastnlp/fitlog 安装最新版试一下。

from fitlog.

fengxyStar avatar fengxyStar commented on August 17, 2024

第一个问题算是功能性失误(我没考虑到有时候某些metric可能会不显示到前端这个场景),就是只能选择暴露在table之中的metric;第二个问题,是之前实现的时候的一个bug,我最近似乎是修复了,您尝试通过pip install git+https://github.com/fastnlp/fitlog 安装最新版试一下。

抱歉前几天服务器网络出了一点问题,没办法安装最新版。刚才安装了最新版本跑一下,但还是会出现上面的第二个问题

from fitlog.

yhcc avatar yhcc commented on August 17, 2024

你能把你记录metric和best_metric的代码贴一下吗?因为有可能是由于metric和best_metric名称没对齐,不过我不太确定。或者如果你方便的话,你可以把你的log脱敏后上传三条给我。

from fitlog.

fengxyStar avatar fengxyStar commented on August 17, 2024

下面的代码和log都是输出一个metric的情况下(因为我之前的回答中,实验是每个epoch会输出三个metric(一开始的图片),后来怀疑是否是这里有问题,我就改成了每个epoch只输出一个metric,不过发现并不能解决问题。

记录metric和best_mteric的代码如下:

best_map = -1
epochs = 11
for epoch in range(epochs):
    # train
    # test
    results = evaluate_fun() # results为dictionary,存储了多个metric,下面只记录了其中一个
    fitlog.add_metric(results['map'], name='map', step=epoch, epoch=epoch)
    if best_map <  results['map']:
        fitlog.add_best_metric(results['map'], name='best_map')
        best_map = results['map']

log记录如下:
log.zip

表格中显示的记录如下:
屏幕快照 2020-08-01 下午5 17 26

from fitlog.

yhcc avatar yhcc commented on August 17, 2024

嗯,原因是由于你table里面叫best_map但是曲线里面叫map,对应不上。用下面的(把best_map修改为map)

best_map = -1
epochs = 11
for epoch in range(epochs):
    # train
    # test
    results = evaluate_fun() # results为dictionary,存储了多个metric,下面只记录了其中一个
    fitlog.add_metric(results['map'], name='map', step=epoch, epoch=epoch)
    if best_map <  results['map']:
        fitlog.add_best_metric(results['map'], name='map')  # 修改成map
        best_map = results['map']

from fitlog.

fengxyStar avatar fengxyStar commented on August 17, 2024

嗯,原因是由于你table里面叫best_map但是曲线里面叫map,对应不上。用下面的(把best_map修改为map)

best_map = -1
epochs = 11
for epoch in range(epochs):
    # train
    # test
    results = evaluate_fun() # results为dictionary,存储了多个metric,下面只记录了其中一个
    fitlog.add_metric(results['map'], name='map', step=epoch, epoch=epoch)
    if best_map <  results['map']:
        fitlog.add_best_metric(results['map'], name='map')  # 修改成map
        best_map = results['map']

的确是这个问题,非常感谢!!现在可以正常画出metric收敛曲线的图了,辛苦了!

from fitlog.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.