我正在处理一个多标签图像分类问题,评估是根据系统预测和实际标签之间的 F1 分数进行的。
鉴于此,我应该使用 "loss='binary_crossentropy'" 还是 "loss=keras_metrics.f1_score()",其中 "keras_metrics.f1_score()" 取自这里: https://pypi.org/project/keras-metrics/?我有点困惑,因为我在互联网上找到的所有关于多标签分类的教程都基于 binary_crossentropy 损失函数,但在这里我需要针对 F1 分数进行优化。
此外,我应该设置 metrics=["accuracy"] 还是 metrics=[keras_metrics.f1_score()],或者干脆把它完全留空?
鉴于此,我应该使用 "loss='binary_crossentropy'" 还是 "loss=keras_metrics.f1_score()",其中 "keras_metrics.f1_score()" 取自这里: https://pypi.org/project/keras-metrics/?我有点困惑,因为我在互联网上找到的所有关于多标签分类的教程都基于 binary_crossentropy 损失函数,但在这里我需要针对 F1 分数进行优化。
此外,我应该设置 metrics=["accuracy"] 还是 metrics=[keras_metrics.f1_score()],或者干脆把它完全留空?
f1_score
作为度量值,而不是损失函数。在模型训练中,损失函数用于指导优化过程,而人可以理解的度量标准则用于我们理解模型的性能(即准确性)。还有一个重要的问题是,损失函数通常应该是可微分的,而大多数使用的度量函数则不具备这一属性。这个回答可能也会有所帮助。 - todaykeras_metrics
包中的f1_score
作为metrics=
(人类可解释的),但对于loss=
,我应该使用一个可微分的函数。那么,以下是关于F1-score
的可微分版本呢?https://www.kaggle.com/rejpalcz/best-loss-function-for-f1-score-metric
- user706838'accuracy'
可能会给出错误信号,特别是当唯一标签数目很高时,因为它给出非常高的值,因此你可能认为你的模型表现得极其良好,这可能并不是真实情况。因此,f1_score
是一个更好的指标。 - todaybinary_crossentropy
也可以工作。但是,如果你能够找到一个可以直接针对 f1 分数进行目标设置的损失函数,并且在你的实验中它比binary_crossentropy
效果更好,那么就可以使用该函数。但是我建议你首先开始尝试最常用的选项:binary_crossentropy
。 - today