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

如何在多分类任务中使用TensorFlow Accuracy指标?为何计算结果不符?

TensorFlow准确率计算异常原因及解决方法

问题原因

你用的tf.keras.metrics.Accuracy()是逐元素对比计算准确率,不是按样本(整行)判断对错。你的数据是3行4列,总共12个元素:

  • 第1行:4个元素全匹配
  • 第2行:4个元素全匹配
  • 第3行:仅最后2个元素匹配
    总正确元素数是10,10/12≈0.8333334,这就是你得到的结果。

而你预期的2/3是样本级准确率(每个样本整体预测正确才算1个对),这需要用专门的分类准确率指标。

解决方法

因为你的标签是独热编码格式,应该使用tf.keras.metrics.CategoricalAccuracy(),它会先对预测值取argmax得到类别,再和真实标签的类别对比,按样本计算准确率:

import tensorflow as tf
import numpy as np

m = tf.keras.metrics.CategoricalAccuracy()
y_true = np.array([
    [0,1,0,0],
    [1,0,0,0],
    [0,1,0,0],
])
y_pred = np.array([
    [0,1,0,0],
    [1,0,0,0],
    [1,0,0,0],
])
m.update_state(y_true, y_pred)
print(m.result().numpy())  # 输出0.6666667,即2/3

两种指标的区别

  • tf.keras.metrics.Accuracy():逐元素比较,适用于单标签的标量真实值和预测值(比如每个样本是一个数字标签)。
  • tf.keras.metrics.CategoricalAccuracy():针对独热编码的标签,先将预测值转换为类别(取概率最大的索引),再和真实标签的类别对比,按样本计数准确率。

内容的提问来源于stack exchange,提问作者Jason Rich Darmawan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 14:45:24