【发布时间】:2022-07-18 17:41:54
【问题描述】:
我正在使用 torchmetrics 来计算多标签分类设置中的 F1 分数、召回率、精度和准确率等指标。使用随机初始化权重,softmax 输出(即预测)可能看起来像这样,批量大小为 8:
import torch
y_pred = torch.tensor([[0.1944, 0.1931, 0.2184, 0.1968, 0.1973],
[0.2182, 0.1932, 0.1945, 0.1973, 0.1968],
[0.2182, 0.1932, 0.1944, 0.1973, 0.1969],
[0.2182, 0.1931, 0.1945, 0.1973, 0.1968],
[0.2184, 0.1931, 0.1944, 0.1973, 0.1968],
[0.2181, 0.1932, 0.1941, 0.1970, 0.1976],
[0.2183, 0.1932, 0.1944, 0.1974, 0.1967],
[0.2182, 0.1931, 0.1945, 0.1973, 0.1968]])
使用正确的标签(one-hot 编码):
y_true = torch.tensor([[0, 0, 1, 0, 1],
[0, 1, 0, 0, 1],
[0, 1, 0, 0, 1],
[0, 0, 1, 1, 0],
[0, 0, 1, 1, 0],
[0, 1, 0, 1, 0],
[0, 1, 0, 1, 0],
[0, 0, 1, 0, 1]])
我可以通过使用 argmax 来计算指标:
import torchmetrics
torchmetrics.functional.f1_score(y_pred.argmax(-1), y_true.argmax(-1))
输出:
tensor(0.1250)
第一个预测恰好是正确的,而其余的都是错误的。但是,没有一个预测概率高于 0.3,这意味着该模型通常对预测不确定。我想对此进行编码并说 f1 分数应该为 0.0,因为没有一个预测概率高于 0.3 阈值。
torchmetrics 或 sklearn 库可以做到这一点吗?
这是常见的做法吗?
【问题讨论】: