【问题标题】:How to use a saved model in Keras to predict and classify a single image?如何使用 Keras 中保存的模型对单个图像进行预测和分类?
【发布时间】:2017-07-12 07:24:45
【问题描述】:

我用 Keras 训练了一个图像分类器,最后我用代码保存了模型

model.save('model1.h5')

现在,当我实际尝试使用此模型预测另一张图像时,我正在使用代码

from keras.models import load_model
from keras.preprocessing import image
import numpy as np

# dimensions of our images
img_width, img_height = 231, 172

# load the model we saved
model = load_model('model1.h5')
model.compile(loss='binary_crossentropy',
              optimizer='rmsprop',
              metrics=['accuracy'])

# predicting images
img = image.load_img('a.png', target_size=(img_width, img_height))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)

images = np.vstack([x])
classes = model.predict_classes(images, batch_size=10)
print(classes)

我收到一个错误提示

ValueError: 检查时出错:预期 conv2d_1_input 的形状为 (None, 231, 172, 1),但得到的数组的形状为 (1, 231, 172, 3)

我使用的图像都是灰度模式,所以我知道我需要将 3 更改为 1,但我不确定如何使用此代码?

另外,当我训练图像时,我设置了

train_datagen = ImageDataGenerator(rescale=1. / 255)
test_datagen = ImageDataGenerator(rescale=1. / 255)

但我不确定我会把代码放在哪里来重新调整它,如果它甚至需要的话

另外,我设置

batch_size = 16

我在代码中看到了预测我放的

classes = model.predict_classes(images, batch_size=10)

我也应该将 batch_size 更改为 16 吗?还是把它留在 10 点?

再次感谢大家!

【问题讨论】:

  • 首先,将图像从 RGB 更改为灰度,您可以使用 opencvskimage,然后将其传递给您的模型

标签: image-processing machine-learning keras


【解决方案1】:

首先,要以灰度模式加载图像,只需像这样添加grayscale=True

img = image.load_img('a.png', target_size=(img_width, img_height), grayscale=True)

其次,在将 img 转换为 numpy 数组后,您可以通过简单地将 x 除以 255. 来重新调整它。

第三,batch_size 参数告诉计算完成的批次有多大。由于您对单个图像进行预测,因此您定义的 batch_size 并不重要。以下是 Keras documentation 关于 batch_size 的推论:

对于推理(评估/预测),建议在不耗尽内存的情况下选择尽可能大的批次大小(因为较大的批次通常会导致更快的评估/预测)。

最后,当您加载模型进行推理时,无需编译模型。您可以安全地删除model.compile(...)

【讨论】:

    【解决方案2】:

    也许错误就在这里。

    img = image.load_img('a.png', target_size=(img_width, img_height))
    

    如果您在训练模型中的 target_size 为 (64, 64)。

    预测时的目标尺寸应该是 (64, 64) 而不是 (img_width, img_height)

    【讨论】:

      猜你喜欢
      • 2020-06-29
      • 1970-01-01
      • 2017-08-18
      • 2020-05-14
      • 2020-06-28
      • 1970-01-01
      • 2017-08-06
      • 2020-09-07
      • 2018-09-29
      相关资源
      最近更新 更多