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

如何在Keras中利用ImageDataGenerator和predict_generator预测单张JPEG概率?

嘿,这个问题我做项目时也碰到过,其实核心就是让ImageDataGenerator能正确输出单张图的批量数据,再传给predict_generator就行。下面给你两种实用的方法,按需选就行:

方法一:用flow_from_directory(快速上手)

这种方法适合不想写太多预处理代码的场景,只需要临时建个简单的目录结构:

  1. 创建临时目录结构
    因为flow_from_directory要求图片放在「类别子文件夹」下,哪怕只有一张图,我们可以建个临时目录:

    temp/
        placeholder_class/
            your_image.jpg
    

    这里placeholder_class只是个占位的类名,随便起就行。

  2. 初始化和训练时一致的ImageDataGenerator
    重点!预测时的预处理必须和训练时完全匹配,比如训练时用了rescale=1./255,那预测时也得加,不能漏:

    from keras.preprocessing.image import ImageDataGenerator
    
    # 和训练时的预处理保持一致,比如训练时用了rescale,这里就同样设置
    test_datagen = ImageDataGenerator(rescale=1./255)
    
  3. 生成单张图的生成器
    配置生成器参数,注意target_size要和模型输入尺寸一致:

    # 假设你的模型输入是(224,224,3),就设置target_size=(224,224)
    single_img_generator = test_datagen.flow_from_directory(
        directory='temp/',
        target_size=(224, 224),
        batch_size=1,
        class_mode=None,  # 不需要标签,只输出图片数据
        shuffle=False  # 关闭打乱,保证顺序正确
    )
    
  4. 用predict_generator预测
    因为只有一张图,steps设为1就行:

    # 加载你训练好的模型
    from keras.models import load_model
    model = load_model('your_trained_model.h5')
    
    predictions = model.predict_generator(single_img_generator, steps=1)
    # predictions就是模型输出的概率数组,比如二分类会得到[[0.15, 0.85]],对应两个类别的概率
    

方法二:直接处理单张图(不用临时文件夹)

如果不想建临时目录,可以手动处理图片后用flow方法生成器:

  1. 读取并预处理单张图

    from keras.preprocessing.image import load_img, img_to_array
    import numpy as np
    
    # 读取图片并调整尺寸到模型输入大小
    img = load_img('your_image.jpg', target_size=(224, 224))
    # 转换成数组
    img_array = img_to_array(img)
    # 增加一个维度,变成批量格式(1, height, width, channels)
    img_batch = np.expand_dims(img_array, axis=0)
    
  2. 用ImageDataGenerator标准化图片
    同样要和训练时的预处理一致:

    test_datagen = ImageDataGenerator(rescale=1./255)
    # 对单张图做标准化
    img_batch = test_datagen.standardize(img_batch)
    
  3. 生成器并预测

    single_generator = test_datagen.flow(img_batch, batch_size=1, shuffle=False)
    predictions = model.predict_generator(single_generator, steps=1)
    

几个关键注意点

  • 预处理必须一致:训练时用了什么归一化、标准化,预测时必须完全相同,不然结果会不准。
  • 输入尺寸匹配:target_size必须和模型的输入层尺寸一致,否则会报错。
  • 新版本Keras提示:如果你的Keras版本比较新,predict_generator已经被标记为弃用了,直接用model.predict(single_generator)效果是一样的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:36:49