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

调用Keras/TensorFlow的model.predict_classes()后如何获取预测准确率?

嘿,作为从ML.NET转过来的新手,我完全懂你想要直接拿到每个预测样本置信度的需求——那边的体验确实很直观!

首先得说:model.predict_classes()这个方法其实已经被TensorFlow/Keras弃用了(在TensorFlow 2.6及以后的版本里官方不再推荐),而且它本身的设计就是只返回预测类别的索引,不会给出对应的置信度(也就是你说的“准确率”)。要拿到每个预测结果的置信度,你需要换用model.predict()方法。

下面是具体的操作步骤:

1. 获取完整的概率分布

调用model.predict(data)会返回一个二维数组,形状是(样本数量, 类别数量),每一行代表一个样本在所有类别上的预测概率值(所有概率加起来等于1)。比如你有10张图片,分3类(自行车、汽车、行人),返回的数组就是(10, 3)的形状。

2. 推导预测类别(替代predict_classes)

如果需要和predict_classes()一样的类别索引结果,你可以对每个样本的概率数组取最大值对应的索引:

import numpy as np

# 获取所有样本的概率分布
predict_probs = model.predict(data)

# 得到每个样本的预测类别索引
predict_classes = np.argmax(predict_probs, axis=1)

3. 获取对应类别的置信度

要拿到每个预测类别的置信度(比如模型认为这张图是自行车的概率是60%),只需要取出每个样本概率数组中对应预测类别的那个值:

# 获取每个预测结果对应的置信度
confidences = predict_probs[range(len(predict_probs)), predict_classes]

举个实际的例子:如果predict_probs里某一行是[0.6, 0.3, 0.1],那么predict_classes会返回0(假设0是自行车的类别索引),对应的confidences就是0.6,也就是60%的置信度,和你在ML.NET里拿到的结果完全对应。

额外提示

如果你还在使用比较旧的TensorFlow版本,predict_classes()可能还能运行,但依然建议改用model.predict()的方式——因为前者只是封装了argmax的逻辑,直接丢弃了最有价值的概率分布信息,而后者能让你获取更完整的预测结果,方便后续的分析或处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:53:31