我可以用 pytorch 训练(优化)f1 分数损失吗

tom*_*l18 5 neural-network deep-learning tensorflow pytorch

我正在构建一个如下所示的二元分类器。我可以替换 BCELoss 来优化 f1 分数吗?

criterion = nn.BCELoss()

preds = model(inputs)
loss = criterion(preds , labels)
Run Code Online (Sandbox Code Playgroud)

Jin*_*ich 13

F1分数不是平滑函数,因此不能直接用梯度下降来优化。随着网络参数逐渐变化,输出概率平滑变化,但 F1 分数仅在概率越过 0.5 边界时发生变化。结果,F1分数的梯度几乎到处都是零。

您可以使用 F 测量的软件版本,如此处所述。诀窍在于,您基本上用某种概率版本替换真阳性和假阳性的计数:

在此输入图像描述

其中o i是网络输出,t i是真实目标概率。然后您继续照常计算 F 测量。

然后将这些定义用于公式 F1=2TP/(2TP+FP+FN)。

此外,您可能会发现这个Kaggle 教程很有用。