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

Keras多目标分类模型验证准确率与sklearn计算结果不一致疑问

结果不一致的核心原因

你当前进行的是多标签分类任务,模型输出层使用sigmoid激活、损失函数使用binary_crossentropy的配置符合任务要求,两个准确率结果差异的核心原因是Keras内置准确率和sklearn的accuracy_score的计算规则完全不同。


Keras侧val_accuracy的计算逻辑

当损失函数指定为binary_crossentropy时,Keras默认调用BinaryAccuracy指标,计算规则为:

  1. 对每个样本的每一个标签维度,单独对比预测值与真实值是否一致
  2. 统计所有标签维度中预测正确的总数量,除以全部样本的总标签数量,得到最终准确率
    比如你训练日志中最后一轮val_accuracy为0.5250,代表验证集里平均有52.5%的标签维度被预测正确。

sklearn侧accuracy_score的计算逻辑

sklearn的accuracy_score默认是为单标签分类设计的,在多标签场景下的默认规则为:

  1. 只有当单个样本的所有标签维度的预测结果和真实结果完全匹配时,才判定该样本预测正确
  2. 统计完全预测正确的样本数量,除以总样本数量得到最终准确率
    你得到的0.0777的结果,代表验证集里只有约7.77%的样本所有标签都被完全预测正确,和Keras的统计维度完全不同,所以数值差异极大。

对齐两种结果的方法

如果你要得到和Keras val_accuracy完全一致的结果,可以使用以下两种方式:

  1. 手动逐元素计算准确率:
import numpy as np
y_pred = np.round(model.predict(X_test))
y_true = y_test.toarray()
keras_aligned_acc = (y_pred == y_true).mean()
  1. 通过Hamming Loss反向计算:
from sklearn.metrics import hamming_loss
keras_aligned_acc = 1 - hamming_loss(y_true, y_pred)

多标签分类的指标建议

多标签分类任务中,Keras默认的逐元素准确率参考价值有限,更建议使用以下指标评估模型效果:

  • 精确率(Precision)、召回率(Recall)、F1分数:可通过sklearn.metrics.f1_score指定average参数计算微平均、宏平均等不同维度的结果
  • 子集准确率:即sklearn默认的accuracy_score结果,代表完全预测正确的样本占比
  • Hamming Loss:代表单个标签维度的错误率,数值越低效果越好

小提示:你的代码里输入层变量名误写为imput_,属于拼写笔误,不影响运行但建议修正为input_更符合规范。

内容的提问来源于stack exchange,提问作者Rodrigo Serna Pérez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:09:00