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

如何获取Keras训练的VGG16模型预测结果的标签及置信度百分比

解决方案

你遇到的问题核心是:Keras内置的decode_predictions仅适配官方预训练VGG16对应的ImageNet 1000分类标签,无法匹配你自定义训练的Fruits360数据集分类,你代码中已经生成了和训练集分类顺序一致的labels列表,直接用该列表做索引映射即可。

1. 单张图片Top1预测结果获取

在你现有代码的print(yhat)后添加以下代码:

import numpy as np

# 获取概率最高的类别索引
pred_idx = np.argmax(yhat[0])
# 映射到对应分类标签
pred_label = labels[pred_idx]
# 计算置信度百分比,保留2位小数
pred_confidence = round(float(yhat[0][pred_idx]) * 100, 2)

print(f"预测分类:{pred_label},置信度:{pred_confidence}%")

2. 获取置信度TopN的结果(示例取Top5)

如果需要输出多个高置信度的候选结果,可使用以下代码:

import numpy as np

# 取概率从高到低排序的前5个索引
topn = 5
topn_idx = np.argsort(yhat[0])[::-1][:topn]

print(f"===== Top{topn} 预测结果 =====")
for idx in topn_idx:
    confidence = round(float(yhat[0][idx]) * 100, 2)
    print(f"分类:{labels[idx]},置信度:{confidence}%")

注意事项

  • 你当前生成labels的逻辑是对训练集子目录排序后生成,需保证训练模型时分类索引的生成逻辑和该逻辑完全一致:如果你训练时使用Keras的ImageDataGenerator加载数据集,其默认生成的class_indices就是按sorted(训练集子目录名)的顺序生成的,无需额外调整。
  • 为避免后续训练/测试路径变动导致标签顺序不匹配,建议在训练阶段就把标签映射关系保存下来,示例代码如下:

训练阶段保存标签映射

import json

# 训练时生成训练数据生成器train_generator后执行
label_map = train_generator.class_indices
# 反转键值对,方便后续用索引直接取标签
label_map = {v: k for k, v in label_map.items()}
# 保存到本地文件
with open("fruit_label_map.json", "w", encoding="utf-8") as f:
    json.dump(label_map, f, ensure_ascii=False)

测试阶段加载标签映射

import json

with open("fruit_label_map.json", "r", encoding="utf-8") as f:
    labels = json.load(f)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:30:00