缺乏对如何使用现有训练模型(keras序列)进行单个预测的理解。
CNN的预处理和训练如下: 从keras.preprocessing.image导入ImageDataGenerator
train_datagen = ImageDataGenerator(rescale=1./255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True)
test_datagen = ImageDataGenerator(rescale=1./255)
training_set = train_datagen.flow_from_directory('dataset/training_set',
target_size=(64, 64),
batch_size=32,
class_mode='binary')
test_set = test_datagen.flow_from_directory('dataset/test_set',
target_size=(64, 64),
batch_size=32,
class_mode='binary')
classifier.fit_generator(training_set,
steps_per_epoch=8000,
epochs=25,
validation_data=test_set,
validation_steps=2000)
由于predict_generator不起作用,所以我卡住了...
答案 0 :(得分:2)
import numpy as np
from keras.preprocessing import image
test_image = image.load_img('dataset/single_prediction/cat_or_dog_1.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
答案 1 :(得分:1)
经过一番谷歌搜索后,我发现单个图像最好用opencv进行预处理,因此转到其文档,该文档通过终端(使用conda)在mac上安装。
conda install opencv
代码中的下一个对此进行了尝试:
import cv2
import numpy as np
predict_datagen = ImageDataGenerator(rescale=1./255)
img1 = cv2.imread('path_to_image/img_1.jpg')
img1 = cv2.resize(img1, (64, 64))
调整大小后,知道模型的图像输入形状为(64、64、3),我检查了形状是否与
相匹配print(img1.shape)
结果发现一切都很好,所以我需要添加尺寸以符合模型的要求,这是我在收到ValueError之后弄清楚的:
ValueError: Error when checking : expected conv2d_1_input to have 4 dimensions, but got array with shape (64, 64, 3)
因此图像被重塑了:
img1 = np.array(img1).reshape((1, 64, 64, 3))#do not miss the order in tuple
此后,我收到了所需形状和大小的图像,并准备使用predict
方法进行一次预测。