【问题标题】:How to prediction more than one images after training model with keras?使用 keras 训练模型后如何预测多个图像?
【发布时间】:2019-12-30 13:42:59
【问题描述】:

我想在用我的模型训练后尝试预测图像。

使用下面的代码我只能预测一张图像,例如,我如何预测超过 50 张图像?

示例代码

import numpy as np
from keras.preprocessing import image
from keras.preprocessing.image import ImageDataGenerator

test_image = image.load_img('dataset/test_image/girls.jpg', target_size = (64, 64))
test_image = image.img_to_array(test_image)
test_image = np.expand_dims(test_image, axis = 0)
result = classifier.predict(test_image)
training_set.class_indices
if result[0][0] == 1:
  prediction = 'nsfw'
else:
  prediction = 'sfw'

print(prediction)

您能告诉我应该更改或添加到代码中吗?

也许您有一个参考代码来预测您可以分享的多个图像?

【问题讨论】:

    标签: python python-3.x keras deep-learning conv-neural-network


    【解决方案1】:

    要批量预测包含 50 个图像的目录,您可以按照此示例 here 执行以下操作:

    batch_holder = np.zeros((50, IMG_SIZE, IMG_SIZE, 3))
    img_dir='test_set/'
    for i,img in enumerate(os.listdir(img_dir)):
      img = image.load_img(os.path.join(img_dir,img), target_size=(IMG_SIZE,IMG_SIZE))
      batch_holder[i, :] = img
    

    在你的情况下IMG_SIZE = 64。 然后你就可以调用model对象的predict_classes()方法:

    classes = loaded_model.predict_classes(batch_holder)
    

    还有这个GitHub Gist 也以类似的方式完成。

    【讨论】:

    • 我尝试了来自 github 的代码,我得到了这个错误 ""OSError: Unable to open file (unable to open file: name = '/models/model.h5', errno = 2, error message = '没有这样的文件或目录', flags = 0, o_flags = 0) ' "" 即使目录和文件的位置放在正确的位置
    • 脚本是否位于“/models/model.h5”所在的同一文件夹中?尝试使用绝对路径来确定。
    • 是的,我确定脚本文件的位置与模型和数据集文件夹相同,但它仍然给我同样的错误
    • 确保模型文件夹中有一个 model.h5 文件(这听起来可能太明显但你永远不知道),如果确实有,请尝试在没有 '.h5' 扩展名的情况下加载它.
    【解决方案2】:

    你希望你的输出是什么?这听起来像是可以通过一个简单的 for 循环来完成。您可能可以在 Keras 中更有效地执行此操作,但采用简单的方法也可以。下面的代码获取dataset/test_image文件夹中的所有图像,并按照image_list的顺序创建一个分类列表:

    import numpy as np
    from keras.preprocessing import image
    from keras.preprocessing.image import ImageDataGenerator
    import os
    
    image_folder = 'dataset/test_image/'
    image_list = os.listdir(image_folder)
    classifier_results = []
    for image in image_list:
        test_image = image.load_img(image_folder + image_list[image], target_size = (64, 64))
        test_image = image.img_to_array(test_image)
        test_image = np.expand_dims(test_image, axis = 0)
        result = classifier.predict(test_image)
        training_set.class_indices
        if result[0][0] == 1:
          prediction = 'nsfw'
        else:
          prediction = 'sfw'
        classifier_results.append(prediction)
        print(image_list[image], "is classified as: " prediction)
    

    【讨论】:

    • 实际上我想要向下输出,如 nfsw sfw sfw nfsw 等....是的,直到我想要的图像数量。但是先生,我尝试了您的代码,但出现错误 AttributeError: 'str' object has no attribute 'load_img' 我该怎么办?
    • 我对上面的 sn-p 进行了一些更新,因此它还考虑了 image.load_img 中的文件夹名称,但强烈建议您在深入了解 Keras 之前遵循一些基本的 Python 教程。跨度>
    【解决方案3】:
    from imutils import paths
    imagePaths = list(paths.list_images('test'))
    
    for test_image in imagePaths:
    
       result = classifier.predict(test_image)
    

    【讨论】:

    • 为您的答案提供更多背景信息。这并没有说明您为什么要使用该代码
    猜你喜欢
    • 2018-04-15
    • 2020-08-05
    • 1970-01-01
    • 2017-05-29
    • 1970-01-01
    • 2020-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多