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

如何使用Keras保存的模型进行图像预测分类?附手部姿态模型示例

没问题!用Keras保存的.h5模型做图像预测完全可行——model.save('model.h5')已经把模型的结构、训练好的权重甚至优化器状态都打包保存下来了,直接加载就能用。下面我会给你完整的示例代码,同时也会说明如何结合CSV数据完成预测流程。

一、先搞懂:为什么可以直接用保存的模型预测?

Keras的save()方法会把模型的网络结构、训练好的权重参数、甚至训练时的预处理配置/优化器状态都打包到.h5文件里,所以加载后就和你训练结束时的模型完全一致,直接就能拿来做预测。

二、单张图像预测的完整示例

假设你训练时是针对RGB图像的手部姿态分类,下面是一步到位的代码:

# 导入依赖(现在更推荐用tensorflow.keras,兼容性更好)
from tensorflow.keras.models import load_model
from tensorflow.keras.preprocessing.image import load_img, img_to_array
import numpy as np

# 1. 加载保存的模型
model = load_model('model.h5')

# 2. 定义预处理函数(重点:必须和你训练时的预处理逻辑完全一致!)
# 比如训练时你把图像resize成(224,224)、除以255归一化,那预测时也要这么做
def preprocess_img(img_path, target_size=(224, 224)):
    # 加载图像,按目标尺寸resize
    img = load_img(img_path, target_size=target_size)
    # 转成numpy数组
    img_array = img_to_array(img)
    # 增加batch维度(模型默认接受批量输入,哪怕只有一张图)
    img_array = np.expand_dims(img_array, axis=0)
    # 归一化(如果训练时做了这一步,就必须加)
    img_array = img_array / 255.0
    return img_array

# 3. 处理待预测的图像
test_img_path = "你的测试手图.jpg"
processed_img = preprocess_img(test_img_path)

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

# 5. 解析结果
# 如果你是多分类任务(比如识别5种手势):
predicted_class_idx = np.argmax(predictions[0])
# 替换成你自己的类别标签(可以从训练用的CSV里提取)
class_labels = ["握拳", "伸掌", "点赞", "OK", "比心"]
predicted_class = class_labels[predicted_class_idx]
predicted_prob = predictions[0][predicted_class_idx]

print(f"预测手势:{predicted_class}")
print(f"预测概率:{predicted_prob:.4f}")

# 如果是二分类任务(比如判断是否是握拳):
# predicted_prob = predictions[0][0]
# if predicted_prob > 0.5:
#     print("预测结果:握拳")
# else:
#     print("预测结果:非握拳")
三、结合CSV数据做批量预测

如果你的CSV里存的是测试集的图像路径(甚至带真实标签),可以批量遍历CSV完成预测,示例如下:

import pandas as pd

# 加载CSV文件,假设CSV有列:image_path(图像路径)、true_label(真实标签,可选)
test_df = pd.read_csv("你的测试数据.csv")

# 批量预测并存储结果
prediction_results = []
for _, row in test_df.iterrows():
    img_path = row['image_path']
    processed_img = preprocess_img(img_path)
    pred = model.predict(processed_img)
    
    # 解析结果(这里以多分类为例)
    pred_idx = np.argmax(pred[0])
    pred_class = class_labels[pred_idx]
    pred_prob = pred[0][pred_idx]
    
    # 把结果存入列表
    prediction_results.append({
        "图像路径": img_path,
        "预测类别": pred_class,
        "预测概率": pred_prob,
        "真实类别": row.get('true_label', '无') # 如果CSV没真实标签就显示“无”
    })

# 把结果转成DataFrame并保存成新的CSV
results_df = pd.DataFrame(prediction_results)
results_df.to_csv("手势预测结果.csv", index=False, encoding="utf-8")
print("批量预测完成,结果已保存到手势预测结果.csv")
关键注意事项
  • 预处理必须和训练时一致:如果训练时你用了ImageDataGenerator做了旋转、翻转等增强,预测时不需要做这些,但resize、归一化、通道顺序(比如RGB/BGR)必须和训练时完全相同,否则预测结果会不准。
  • 版本兼容性:如果是用旧版纯Keras保存的模型,建议用tensorflow.keras.models.load_model加载,避免版本冲突。
  • 类别标签对应:确保class_labels的顺序和你训练时的类别顺序完全一致(比如训练时CSV里的类别顺序是A、B、C,那这里也要按同样顺序写)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:42:57