2017-09-11 3 views
1

私はKerasを初めて使い、Convolutional Neural Networkモデルを構築することを学んでいます。私は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)を形作る持つ画像のバッチを取ります。

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

それともまた、単に(1, 1, 28, 28)にサンプルのアレイを再構築することができます。この場合、あなたは新たな次元を追加することによって、1にnum_samplesを設定する必要がありますので、単一のサンプルを持っています。

+0

標準Kerasでは 'channels_last'が使用されます(ユーザーが明示的に変更した場合を除き)。形状は'(1,28,28,1) 'でなければなりません。 –

+0

@ダニエル質問のエラーメッセージを読んでください。すでに(1、1、28、28)です。 –

+0

@Daniel最初の次元(X_test [39])を破棄した後のその(1,28,28) –

2

データを変更する必要があると思います(トレーニング中にモデル内で実行されている可能性があり、コードなしでは言えません)。このような何かを試してみてください:モデルは何も変換されていない

print(model.predict(X_test[39].reshape(-1, 28, 28, 1),verbose=2)) 
関連する問題