aim ``` Metric values are returned out of order ```

nzkunb0c  于 4个月前  发布在  其他
关注(0)|答案(3)|浏览(38)

🐛 Bug

metric.values.values_list() 返回的值顺序与它们被记录的顺序不一致。同样,对于 values_numpy()sparse_list()sparse_numpy() 也是如此。不清楚如何以正确的顺序对它们进行排序。

重现方法

losses = [m for m in run.metrics() if m.name == "loss"][0].values.values_list()

预期行为

losses 应按照添加的顺序出现。

环境

  • Aim 版本 3.17.1
  • Python 版本 3.11.2
  • pip 版本 23.0.1
  • macOS
bt1cpqcv

bt1cpqcv1#

我找到了一种解决这个问题的方法,但它似乎违反直觉。对于任何寻找相同方法的人:

indices = np.argsort(metric.timestamps.values_numpy())
losses = losses[indices]
myss37ts

myss37ts2#

感谢mrzv的报告!这非常奇怪,我们会进行调查。

nkoocmlb

nkoocmlb3#

我找到了一种解决这个问题的方法,但它似乎违反直觉。[...]
几个月前,当我遇到这个问题时,我最终使用了 similar workaround 来处理乱序度量数据。它通过在已知单调递增的度量(如 timestamps,正如您所指出的)上进行反向查找来工作。在我的案例中,我记录了一个 "epoch" 度量,这是我在记录我的纪元度量时当前纪元的值,并且严格单调递增,例如 1, 2, 3, 4, ...。以下是一个最小的解决方法示例:

# Workaround via reverse lookup.
def get_ordered_metric_values(metric, context, monotonic_metric="epoch"):
    _, unordered_metric_values = run.get_metric(metric, context).values.sparse_numpy()
    _, monotonic_metric_values = run.get_metric(monotonic_metric, context).values.sparse_numpy()
    idx = np.argsort(monotonic_metric_values)
    return unordered_metric_values[idx]

相关问题