回答:
predict_classes
の(num_instances, features)
ように、形状の2D配列を期待していX_test
ます。しかし、のように単一のインスタンスにインデックスを付けると、X_test[10]
形状の1D配列が返されます(features,)
。
追加の軸を戻すには、、、、またはを使用するか、そもそもそれを削除しないでください(たとえばを使用して)。np.expand_dims
(X_test[10], axis=0)
X_test[10][np.newaxis,:]
X_test[10:11]
現在(Keras v2.0.8)は、バッチでトレーニングした後、単一行の予測を取得するのに少し手間がかかります。
基本的に、batch_sizeはトレーニング時に固定され、予測時に同じでなければなりません。
現在の回避策は、トレーニングされたモデルから重みを取得し、それらを、今作成したばかりの新しいモデル(batch_sizeが1)の重みとして使用することです。
そのための簡単なコードは
model = create_model(batch_size=64)
mode.fit(X, y)
weights = model.get_weights()
single_item_model = create_model(batch_size=1)
single_item_model.set_weights(weights)
single_item_model.compile(compile_params)
より深く掘り下げたブログ投稿は次のとおりです。https: //machinelearningmastery.com/use-different-batch-sizes-training-predicting-python-keras/
私は過去にこのアプローチを使用して、予測時に複数のモデルを作成しました。1つは大きなバッチで予測を行い、もう1つは小さなバッチで予測を行い、もう1つは単一のアイテムで予測を行います。バッチ予測の方がはるかに効率的であるため、予測をかなり迅速に取得しながら、(batch_sizeで割り切れる数だけでなく)任意の数の予測行を柔軟に取り込むことができます。
あなたはただ1つの例でリストを渡すべきです、私は今テストすることができませんが、これはうまくいくはずです:
model1.predict_classes([X_test[10]])
インスタンスを出力しようとすると、次のようになります。
x_test:\n
array([[0., 1., 1., ..., 0., 0., 0.],
[0., 1., 1., ..., 0., 0., 0.],
[0., 1., 1., ..., 0., 0., 0.],
...,
[0., 1., 0., ..., 0., 0., 0.],
[0., 1., 1., ..., 0., 0., 0.],
[0., 1., 1., ..., 0., 0., 0.]])
x_test[0]:
array([0., 1., 1., ..., 0., 0., 0.])
したがって、np.arrayを使用して次元を追加し直すことができると思います。
mode.predict(np.array(x_test[0],ndmin=2))
numpy.ndarray
。したがって、必要な値だけを取得するには:q = model.predict(np.array([single_x_test]))[0]