如何在CNN中根据模型转换测试数据?

Gri*_*ock 2 python neural-network conv-neural-network keras

我是Keras的新手,正在学习构建卷积神经网络模型。我正在使用MNIST数据集。

(X_train, y_train), (X_test, y_test) = mnist.load_data()
Run Code Online (Sandbox Code Playgroud)

经过构建和评估,我获得了99%以上的准确性。

model = NN_model() # Sequential model built with multiple Convolution and pooling layers

model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=3, batch_size=200, verbose=2)

scores = model.evaluate(X_test, y_test, verbose=0)
Run Code Online (Sandbox Code Playgroud)

现在,我想通过选择一个随机图像,使用matplotlib打印它,然后使用学习的模型进行预测来手动检查结果。例如,X_test [39]数据如下所示

print(model.predict(X_test[39],verbose=2))
Run Code Online (Sandbox Code Playgroud)

当我尝试执行此操作时,它会要求我将预处理的数据转换为conv2d数据,因为模型正在对其进行转换。如何将这种转换手动应用于测试数据?

ValueError: Error when checking : expected conv2d_1_input to have 4 dimensions, but got array with shape (1, 28, 28)
Run Code Online (Sandbox Code Playgroud)

Mat*_*gro 5

该模型不进行任何转换,网络获取一批具有形状的图像(num_samples, channels, width, height)。在这种情况下,您只有一个样本,因此应num_samples通过添加新维度将其设置为一个样本:

sample = X_test[39]
model.predict(sample[np.newaxis, :, :, :])
Run Code Online (Sandbox Code Playgroud)

或者,您也可以将样本数组重塑为(1, 1, 28, 28)