这是我创建的模型:
model.add(Conv2D(64, (5,5), input_shape = (28, 28, 3)))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Conv2D(64, (5, 5)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(64))
# added layers
model.add(Dense(10))
model.add(Activation('softmax'))
model.compile(loss='sparse_categorical_crossentropy',
optimizer='adam',
metrics=['accuracy'])
model.fit(X, y, batch_size=256, epochs=25, validation_split=0.3)
但是加载图像进行预测:
test_image = np.array(img)
test_image = test_image.astype('float32')
test_image /= 255
# image.shape is 28, 28, 3
print((model.predict(test_image)))
导致以下错误:ValueError:层sequencial_11的输入0与层不兼容::预期min_ndim=4,实际ndim=3。收到完整形状:(无,28,3(
X.shape是(2163,28,28,3(,其中2163是28x28像素的图片数量。
模型需要一个具有4个维度的输入。这意味着你必须用.reform(n_images,28,28,3(来重塑你的形象。现在,您添加了一个额外的维度,而没有更改数据。基本上,您需要将数据重塑为(n_images、x_shape、y_shape、channels(。试试看,确保你的输入层的形状是28,28,3
您需要一个批处理维度,因为Keras已经习惯了该输入形状。我建议你使用np.expand_dims
:
test_image = np.array(img).astype('float32')
test_image = np.expand_dims(test_image, axis=0)/255
test_image = tf.image.resize_with_pad(test_image, 28, 28)
print((model.predict(test_image)))