2017-09-11 23 views
1

我是Keras的新手,我正在学习构建卷积神经网络模型。我正在使用MNIST数据集。如何根据CNN中的模型转换测试数据?

(X_train, y_train), (X_test, y_test) = mnist.load_data() 

建立和评估后,我获得了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) 

现在,我想通过拾取随机图像,打印出来使用matplotlib,然后使用学习的模型预测其手动检查结果。例如,X_test [39]数据看起来像this

print(model.predict(X_test[39],verbose=2)) 

当我尝试这样做,它要求我到预先处理过的数据转换成conv2d数据,该模型将其转换。如何手动对测试数据应用此转换?

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

回答

4

的模型没有将任何东西,网络需要一批图像,其具有形状(num_samples, channels, width, height)。在这种情况下,你有一个样品,所以你应该通过增加一个新的维度设置num_samples一个:

sample = X_test[39] 
model.predict(sample[np.newaxis, :, :, :]) 

或者你也可以只重塑样品阵列(1, 1, 28, 28)

+0

标准Keras使用'channels_last'(除非用户明确地改变了它),这意味着形状应该是'(1,28,28,1)'。 –

+0

@Daniel阅读问题中的错误信息,它已经是(1,1,28,28)。 –

+0

@Daniel它(1,28,28)丢弃第一维(X_test [39])后。 –

2

我想你需要重塑数据(也许是在模型内进行,而训练,离不开码说的)。尝试是这样的:

print(model.predict(X_test[39].reshape(-1, 28, 28, 1),verbose=2)) 
相关问题