You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

设置multi_label=True时,tf.keras.metrics.AUC为何返回0?

tf.keras.metrics.AUC(multi_label=True)为何返回0.0而非1.0?

我在研究tf.keras.metrics.AUC(multi_label=True)的工作机制,根据文档,它会单独计算每个类别的AUC再取平均值。但在下面的测试案例中,当预测值和真实值完全相同时,结果却是0.0,而不是预期的1.0:

y_true = [
    [1, 0, 0, 0, 1],
]

acc = tf.keras.metrics.AUC(multi_label=True, num_labels=5)

acc.reset_state()
acc.update_state(tf.constant(y_true), tf.constant(y_true))
acc.result().numpy()

>>> 0.0

问题原因

问题出在单个样本无法有效计算AUC。AUC的核心是衡量模型对正负样本的排序能力,它要求每个类别至少同时存在正例和负例,或者有多个样本能形成排序对比。

在你的测试中,每个类别仅对应1个样本:

  • 类别0和类别4是正样本(标签1),但没有对应的负样本;
  • 类别1、2、3是负样本(标签0),但没有对应的正样本。

对于这类只有单一样本的类别,TensorFlow无法计算出有效的AUC值,会默认将该类别的AUC贡献设为0。5个类别的AUC平均值自然就是0.0。

修正后的测试案例

如果添加多组样本,让每个类别都包含正例和负例,就能得到预期的1.0结果:

y_true = [
    [1, 0, 0, 0, 1],
    [0, 1, 0, 1, 0]
]

acc = tf.keras.metrics.AUC(multi_label=True, num_labels=5)
acc.reset_state()
acc.update_state(tf.constant(y_true), tf.constant(y_true))
print(acc.result().numpy())

>>> 1.0

内容的提问来源于stack exchange,提问作者rodrigo-silveira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 04:20:30