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

Keras中如何获取图像分类的百分比预测及Top5类别?

没问题!你的模型最后一层用了Softmax激活,所以model.predict()返回的其实就是每个类别的概率值,只是因为部分概率太小被默认的打印格式隐藏成0了。下面给你具体的解决步骤:

解决方法

1. 查看完整的类别概率(百分比)

你可以通过设置numpy的打印选项,让所有小数值都显示出来,这样就能看到每个类别的具体概率(乘以100就是对应的百分比):

import numpy as np
# 设置numpy打印参数:禁用科学计数法,保留6位小数
np.set_printoptions(suppress=True, precision=6)

# 你的单张图像预测代码
img = image.load_img('C:/Users/Kinga/Desktop/user_test/2.jpg', target_size=(32, 32))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
images = np.vstack([x])
classes = model.predict(images)
print(classes)

执行后,你会看到类似这样的输出(示例):

[[0.000001 0.000002 0.000000 ... 0.000000 0.999950 0.000000]]

把每个数值乘以100,就是对应类别的预测百分比。

2. 获取置信度Top5的类别

可以用numpy的排序工具提取Top5高置信度的类别索引和对应的概率值,示例代码如下:

# 取出单张图片的预测结果(predict返回批量结果,取第一个元素)
pred_probs = classes[0]

# 获取Top5置信度的类别索引,按置信度从高到低排序
top5_indices = pred_probs.argsort()[-5:][::-1]
# 获取对应的置信度值
top5_probs = pred_probs[top5_indices]

# 打印Top5结果
print("Top5 类别索引及置信度:")
for idx, prob in zip(top5_indices, top5_probs):
    print(f"类别 {idx}: {prob * 100:.2f}%")

如果你有预先定义的类别名称列表,还可以把索引替换成具体名称:

# 假设你有20个类别的名称列表
class_names = ["类别0", "类别1", "类别2", "类别3", "类别4", "类别5", 
               "类别6", "类别7", "类别8", "类别9", "类别10", "类别11", 
               "类别12", "类别13", "类别14", "类别15", "类别16", "类别17", 
               "类别18", "类别19"]

print("Top5 类别及置信度:")
for idx, prob in zip(top5_indices, top5_probs):
    print(f"{class_names[idx]}: {prob * 100:.2f}%")

补充说明

你之前看到的输出全是0(除了一个1),是因为模型对第6个类别(索引5,从0开始计数)的置信度接近100%,其他类别的概率极小,numpy默认的打印格式会把这些极小值显示为0,设置打印选项后就能看到真实的小数值了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:02:09