Python 层的不兼容输入(ndim=4,发现ndim=3)
我试图在Keras重新创建花卉识别CNN。该模型似乎可以工作,至少在笔记本中是这样(同时在验证集上获得预测),但我需要在其他地方使用该模型。照片是150x150,这是我如何建立CNN的:Python 层的不兼容输入(ndim=4,发现ndim=3),python,tensorflow,keras,Python,Tensorflow,Keras,我试图在Keras重新创建花卉识别CNN。该模型似乎可以工作,至少在笔记本中是这样(同时在验证集上获得预测),但我需要在其他地方使用该模型。照片是150x150,这是我如何建立CNN的: model = Sequential() model.add(Conv2D(filters=32, kernel_size=(5,5), padding='Same', activation='relu', input_shape=(150, 150, 3))) model.add(MaxPooling2D(p
model = Sequential()
model.add(Conv2D(filters=32, kernel_size=(5,5), padding='Same', activation='relu', input_shape=(150, 150, 3)))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Conv2D(filters=64, kernel_size=(3,3), padding='Same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2), strides=(2,2)))
model.add(Conv2D(filters=96, kernel_size=(3,3), padding='Same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2), strides=(2,2)))
model.add(Conv2D(filters=96, kernel_size=(3,3), padding='Same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2), strides=(2,2)))
model.add(Flatten())
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dense(5, activation="softmax"))
尽管如此,当我试图通过样本照片和加载的模型在本地预测结果时:
model = model_from_json(open("model.json", "r").read())
model.load_weights('model.h5')
img = cv2.imread('/path/to/the/dir/testimage.jpg')
img = cv2.resize(img, (150, 150))
data = np.array(img)
model.summary()
result = model.predict(data)
我收到这个错误:
ValueError: Input 0 of layer sequential_1 is incompatible with the layer: expected ndim=4, found ndim=3. Full shape received: [None, 150, 3]
模型汇总的输出为:
Model: "sequential_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_1 (Conv2D) (None, 150, 150, 32) 2432
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 75, 75, 32) 0
_________________________________________________________________
conv2d_2 (Conv2D) (None, 75, 75, 64) 18496
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 37, 37, 64) 0
_________________________________________________________________
conv2d_3 (Conv2D) (None, 37, 37, 96) 55392
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 18, 18, 96) 0
_________________________________________________________________
conv2d_4 (Conv2D) (None, 18, 18, 96) 83040
_________________________________________________________________
max_pooling2d_4 (MaxPooling2 (None, 9, 9, 96) 0
_________________________________________________________________
flatten_1 (Flatten) (None, 7776) 0
_________________________________________________________________
dense_1 (Dense) (None, 512) 3981824
_________________________________________________________________
activation_1 (Activation) (None, 512) 0
_________________________________________________________________
dense_2 (Dense) (None, 5) 2565
=================================================================
Total params: 4,143,749
Trainable params: 4,143,749
Non-trainable params: 0
我不明白为什么它会收到一个不同的形状。我已经读到重塑可能会做这件事,但我正在使用
fit\u generator
来适应训练集,我不确定这是否可行。确保第一个维度为1(要预测的图像为1)。您的模型期望无维度为采样数,第二+第三维度为图像分辨率,第四维度为图像的RGB通道
data=np.展开尺寸(数据,轴=0)
将向第一个轴添加额外尺寸
见: