预期conv2d_28_input具有4个维度,但形状数组仅包含3个维度

时间:2020-02-05 09:19:58

标签: python tensorflow keras

我已经建立了图像分类模型,但是出现错误,提示ValueError: Error when checking input: expected conv2d_28_input to have 4 dimensions, but got array with shape (341, 720, 3)

我还更改了input_shape函数中的model.add

这是我建立的模型:


model = Sequential()

#3 Convolutional layers
input_shape = X.shape[1:]
model.add(Conv2D(64, (3,3), input_shape = X.shape[1:]))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2,2)))

model.add(Conv2D(64, (3,3)))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2,2)))

model.add(Conv2D(64, (3,3)))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))

#2 hidden layers
model.add(Flatten())
model.add(Dense(128))
model.add(Activation("relu")) 

model.add(Dense(128))
model.add(Activation("relu")) 


model.add(Dense(2))
model.add(Activation('softmax'))

model.compile(loss="sparse_categorical_crossentropy", optimizer="adam", metrics=['accuracy'])

history=model.fit(X,y, batch_size=6, epochs=5, validation_split=0.1)

保存模型

model.save_weights("model.h5")
model.save('CNN.model')

预测输出类别

from keras.preprocessing.image import img_to_array, load_img

model = tf.keras.models.load_model("CNN.model")
image = load_img("/content/drive/My Drive/Images/Blackened/blackened-1.jpg") #image is stored here
final = img_to_array(image)
prediction = model.predict(final)
prediction = list(prediction[0])
print(CATEGORIES[prediction.index(max(prediction))])

运行最后的代码块时,出现上述错误

1 个答案:

答案 0 :(得分:0)

您需要添加数据中缺少的批次尺寸,即使它是单个图像也是如此:

final = img_to_array(image)
final = np.expand_dims(final, axis=0)
prediction = model.predict(final)