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

如何导入已训练的Keras CNN模型对单张图片进行预测?

用单张图片测试Keras CNN模型的方法

嘿,我来帮你搞定这个问题!你已经用ImageDataGenerator完成了模型训练,现在要测试单张图片,核心是让测试图片的预处理逻辑和训练时完全对齐,下面是具体步骤:

1. 加载保存好的模型

先把你存的model.h5模型加载进来,用Keras的内置方法就能搞定:

from keras.models import load_model

# 加载训练好的模型
model = load_model('model.h5')

2. 预处理单张测试图片

这一步是关键,必须和你训练时ImageDataGenerator的设置完全匹配(比如你用了rescale=1./255和target_size=(image_size, image_size)),具体操作如下:

from keras.preprocessing import image
import numpy as np

# 替换成你训练时实际用的image_size数值
image_size = 224  

# 1. 加载图片:指定和训练一致的尺寸,颜色模式要匹配(训练用RGB就设'rgb',灰度图设'grayscale')
img = image.load_img('你的测试图片路径.jpg', target_size=(image_size, image_size), color_mode='rgb')

# 2. 将图片转换为数组格式
img_array = image.img_to_array(img)

# 3. 扩展维度:因为模型默认接受批量输入(形状为 (batch_size, height, width, channels)),所以要手动加一个batch维度
img_array = np.expand_dims(img_array, axis=0)

# 4. 和训练时做同样的归一化处理
img_array /= 255.0

3. 运行预测并解析结果

现在可以把预处理好的图片喂给模型,然后解析预测结果了:

# 执行预测
predictions = model.predict(img_array)

# 解析结果:因为你训练时用了class_mode='categorical',predictions是每个类别的概率值
# 如果你之前保存了训练生成器的类别映射,直接用就行;没保存的话可以重新生成一次或者手动定义
# 示例:从训练生成器获取类别映射
# class_indices = train_generator.class_indices
# 反转字典得到「索引→类别名称」的映射
# idx_to_class = {v: k for k, v in class_indices.items()}

# 取概率最高的类别索引
predicted_idx = np.argmax(predictions[0])
# 对应的类别名称
# predicted_class = idx_to_class[predicted_idx]

print(f"各类别预测概率:{predictions[0]}")
print(f"预测类别索引:{predicted_idx}")
# print(f"预测类别名称:{predicted_class}")

重要提醒

  • 测试图片的颜色通道数必须和训练时一致:比如训练用的是RGB(3通道),就别用灰度图(1通道)测试,否则会报错。
  • 测试时不要加训练用的数据增强(比如旋转、翻转),只做尺寸调整和归一化就好,不然会干扰预测结果。
  • 如果训练时还做了其他预处理(比如均值减法、标准化),测试时必须完全照搬相同逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:14:31