Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing 如何使用Keras中保存的模型来预测和分类单个图像?_Image Processing_Machine Learning_Keras - Fatal编程技术网

Image processing 如何使用Keras中保存的模型来预测和分类单个图像?

Image processing 如何使用Keras中保存的模型来预测和分类单个图像?,image-processing,machine-learning,keras,Image Processing,Machine Learning,Keras,我用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

我用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_输入具有形状(None,231,172,1),但获得具有形状(1231,172,3)的数组

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

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

train_datagen = ImageDataGenerator(rescale=1. / 255)
test_datagen = ImageDataGenerator(rescale=1. / 255)
但我不确定如果需要的话,我会把代码放在哪里来重新缩放它

还有,我设置了

batch\u size=16

我在代码中看到了预测,我把

classes=model.predict\u类(图像,批量大小=10)

我是否也应该将批次大小更改为16?还是把它留在10点

再次感谢各位

首先,要在灰度模式下加载图像,只需如下添加
grayscale=True

img = image.load_img('a.png', target_size=(img_width, img_height), grayscale=True)
其次,将
img
转换为numpy数组后,只需将
x
除以
255即可对其进行重新缩放。

第三,
batch\u size
参数告诉我们进行计算的批次有多大。由于您对单个图像进行预测,因此您定义的批大小实际上并不重要。下面是Keras关于批量大小的推断:

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


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

也许错误就在这里

img = image.load_img('a.png', target_size=(img_width, img_height))
如果训练模型中的目标_大小为(64,64)


预测期间的目标大小应该是(64,64)而不是(img_宽度,img_高度)

首先,将图像从RGB更改为灰度,您可以使用
opencv
skimage
进行此操作,然后将其传递给您的模型