我使用DirectoryIterator
从目录中读取图像并训练了我的模型。我希望能够验证它是否起作用,因此我尝试在包含图像的numpy数组上使用model.predict
,但是出现以下错误
ValueError: Error when checking input: expected conv2d_input to have 4
dimensions, but got array with shape (128, 56)
我不确定DirectoryIteratory
中的flow_from_directory
具有哪种形状或属性,因此不确定model.predict
期望得到什么样的输入。这是我的代码的样子
train_datagen = ImageDataGenerator(
rescale=1. / 255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True)
test_datagen = ImageDataGenerator(rescale=1. / 255)
train_generator = train_datagen.flow_from_directory(
train_data_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode='binary')
validation_generator = test_datagen.flow_from_directory(
validation_data_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode='binary')
model.fit_generator(
train_generator,
steps_per_epoch=nb_train_samples // batch_size,
epochs=epochs,
validation_data=validation_generator,
validation_steps=nb_validation_samples // batch_size)
答案 0 :(得分:1)
在您的代码段中,您似乎正在使用this博客文章。因此,ConvNet的第一层是卷积层,期望输入形状为(150, 150)
。让我们看看您的错误消息:
ValueError :检查输入时出错:预期conv2d_input具有4 尺寸,但数组的形状为(128,56)
该错误说明两件事:
因此,首先,您的numpy数组形状应为(150, 150)
的形状(由于ConvNet的输入形状),并且应将图像的尺寸扩展为4个尺寸。例如(假设您的numpy数组为x
):
x = x.reshape(1,150,150,3).astype('float')
x /= 255
pred = model.predict(x)
如果要从硬盘读取图像,则可以使用以下代码:
img = keras.preprocessing.image('image.jpg', target_size=(150,150))
x = keras.preprocessing.image.img_to_array(img)
x = x.reshape(1,150,150,3).astype('float')
x /= 255
pred = model.predict(x)
希望有帮助。