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

关于Keras多分类任务中训练与验证准确率计算方法的问询

Keras多分类任务中训练/验证准确率的计算机制拆解

我明白你想深入搞清楚Keras里准确率的底层计算逻辑——毕竟损失函数(categorical_crossentropy)的逻辑你已经清楚,但准确率作为核心评估指标,确实需要明确它的计算细节。下面就一步步拆解:

核心指标:多分类场景下的默认准确率

在多分类任务中,Keras默认使用的准确率是**CategoricalAccuracy(针对独热编码标签)或SparseCategoricalAccuracy**(针对整数型标签)。当你在模型编译时指定metrics=['accuracy'],Keras会自动根据你的标签类型(独热/整数)选择对应的指标类,不用手动区分。

具体计算步骤(训练/验证通用逻辑)

不管是训练准确率还是验证准确率,计算逻辑完全一致,只是计算时用到的数据集(训练批次/验证集)不同:

  • 步骤1:处理模型输出
    模型最后一层通常是Dense(num_classes, activation='softmax'),输出是形状为(batch_size, num_classes)的张量,每个元素代表对应类别的预测概率(所有类别概率和为1)。
  • 步骤2:确定预测类别
    对每个样本的输出张量,执行argmax(axis=-1)操作——也就是取概率最大的那个类别的索引,作为模型的预测结果。比如输出[0.1, 0.8, 0.1],argmax后得到类别索引1。
  • 步骤3:处理真实标签
    • 如果是独热编码标签(比如[0,1,0]对应类别1),同样对真实标签执行argmax(axis=-1)得到真实类别索引;
    • 如果是整数型标签(直接用1表示类别1),Keras会跳过argmax步骤,直接用原始标签对比。
  • 步骤4:计算准确率
    统计预测类别索引与真实类别索引完全匹配的样本数量,除以当前计算范围内的总样本数,得到的就是该批次(训练)或整个验证集(验证)的准确率。

训练准确率 vs 验证准确率的差异

两者的核心计算逻辑相同,但计算范围和统计方式有区别:

  • 训练准确率:在每个训练批次计算一次准确率,然后Keras会对所有批次的准确率进行加权平均(因为最后一个批次的样本数可能不足batch_size,权重就是该批次的样本数),最终得到整个epoch的训练准确率。
  • 验证准确率:在每个epoch结束后,用完整的验证集计算——把所有验证样本的预测结果和真实标签对比,统计总正确数除以总验证样本数,得到的就是该epoch的验证准确率(没有加权,因为验证集是完整的)。

底层实现对应函数

如果你想手动调用或自定义,可以直接使用Keras的指标类:

  • 针对独热标签:tf.keras.metrics.CategoricalAccuracy()
  • 针对整数标签:tf.keras.metrics.SparseCategoricalAccuracy()

举个简单的例子:
假设batch里有3个样本,模型输出的概率矩阵是:

[[0.1, 0.8, 0.1],
 [0.3, 0.2, 0.5],
 [0.6, 0.3, 0.1]]

真实独热标签是:

[[0,1,0],
 [1,0,0],
 [1,0,0]]

经过argmax后,预测类别是[1,2,0],真实类别是[1,0,0],正确的样本是第1和第3个,所以准确率是2/3 ≈ 0.6667。

内容的提问来源于stack exchange,提问作者user121

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:16:42