如何使用自有图像数据集与H5模型创建混淆矩阵
用自有图像数据集与H5模型生成混淆矩阵的实操方案
核心步骤拆解
1. 加载模型与预处理自有数据集
- 加载已训练好的H5模型:
from tensorflow.keras.models import load_model model = load_model("你的模型文件路径.h5") - 预处理自有图像:必须和模型训练时的预处理逻辑完全一致,比如图像尺寸、归一化方式、通道顺序等。举个示例:
import cv2 import numpy as np def preprocess_image(img_path, target_size=(224,224)): img = cv2.imread(img_path) img = cv2.resize(img, target_size) # 若训练时用了归一化到0-1 img = img / 255.0 # 若训练时用了通道转换(比如RGB转BGR) img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 扩展维度适配模型输入 img = np.expand_dims(img, axis=0) return img - 同时整理好所有图像的真实标签,建议用数组存储,比如
y_true = [0,1,0,2,...],标签编码要和训练时一致(比如0对应猫、1对应狗)。
2. 获取模型预测结果
- 遍历自有数据集的所有图像,逐个预处理后喂给模型预测,收集预测标签:
y_pred = [] for img_path, true_label in zip(你的图像路径列表, y_true): processed_img = preprocess_image(img_path) pred_probs = model.predict(processed_img, verbose=0) # 取概率最大的类别作为预测标签 pred_label = np.argmax(pred_probs, axis=1)[0] y_pred.append(pred_label) # 转成numpy数组方便后续计算 y_true = np.array(y_true) y_pred = np.array(y_pred) - 若数据集规模大,可分批次处理,避免内存占用过高。
3. 计算混淆矩阵
- 用sklearn的工具快速计算:
from sklearn.metrics import confusion_matrix cm = confusion_matrix(y_true, y_pred)
4. 可视化混淆矩阵(可选)
- 用热力图直观展示,方便分析分类错误情况:
import matplotlib.pyplot as plt import seaborn as sns # 替换成你的类别名称列表 class_names = ["猫", "狗", "鸟"] plt.figure(figsize=(10, 8)) sns.heatmap(cm, annot=True, fmt="d", cmap="Blues", xticklabels=class_names, yticklabels=class_names) plt.xlabel("预测标签") plt.ylabel("真实标签") plt.title("混淆矩阵") plt.show()
关键注意事项
- 标签编码一致性:自有数据集的真实标签必须和模型训练时的编码规则完全匹配,不能出现训练时0对应猫、测试时0对应狗的情况。
- 预处理一致性:任何训练时用到的预处理步骤(比如均值减法、通道转换、缩放比例)都要在预测时原样复现,否则预测结果会失真。
- 批量处理优化:如果数据集超过1000张图,建议用批量读取+批量预测的方式,比如一次处理32/64张图,减少IO开销。
内容的提问来源于stack exchange,提问作者อิม อัฐวงศ์
相关产品推荐
相关产品推荐

