2016-06-18 15 views
28

私はreuters-exampleデータセットで遊んでいて、うまく動作しています(私のモデルは訓練されています)。私はモデルを保存する方法を読んだので、後で再び使用するためにロードすることができました。しかし、この保存されたモデルを使って新しいテキストを予測するにはどうすればよいですか? models.predict()は使用しますか?ケラス、モデルを訓練した後、どのように予測するのですか?

このテキストを特別な方法で準備する必要がありますか?

は私が

import keras.preprocessing.text 

text = np.array(['this is just some random, stupid text']) 
print(text.shape) 

tk = keras.preprocessing.text.Tokenizer(
     nb_words=2000, 
     filters=keras.preprocessing.text.base_filter(), 
     lower=True, 
     split=" ") 

tk.fit_on_texts(text) 
pred = tk.texts_to_sequences(text) 
print(pred) 

model.predict(pred) 

でそれを試してみました。しかし、私はいつも

(1L,) 
[[2, 4, 1, 6, 5, 7, 3]] 
--------------------------------------------------------------------------- 
AttributeError       Traceback (most recent call last) 
<ipython-input-83-42d744d811fb> in <module>() 
     7 print(pred) 
     8 
----> 9 model.predict(pred) 

C:\Users\bkey\Anaconda2\lib\site-packages\keras\models.pyc in predict(self, x, batch_size, verbose) 
    457   if self.model is None: 
    458    self.build() 
--> 459   return self.model.predict(x, batch_size=batch_size, verbose=verbose) 
    460 
    461  def predict_on_batch(self, x): 

C:\Users\bkey\Anaconda2\lib\site-packages\keras\engine\training.pyc in predict(self, x, batch_size, verbose) 
    1132   x = standardize_input_data(x, self.input_names, 
    1133         self.internal_input_shapes, 
-> 1134         check_batch_dim=False) 
    1135   if self.stateful: 
    1136    if x[0].shape[0] > batch_size and x[0].shape[0] % batch_size != 0: 

C:\Users\bkey\Anaconda2\lib\site-packages\keras\engine\training.pyc in standardize_input_data(data, names, shapes, check_batch_dim, exception_prefix) 
    79  for i in range(len(names)): 
    80   array = arrays[i] 
---> 81   if len(array.shape) == 1: 
    82    array = np.expand_dims(array, 1) 
    83    arrays[i] = array 

AttributeError: 'list' object has no attribute 'shape' 

を取得し、あなたが訓練されたモデルとの予測を作成する方法についてどのような勧告を持っていますか?

答えて

23

model.predict()は、最初のパラメータがnumpy配列であると想定しています。 numpy配列の属性がshapeではないリストを指定します。

それ以外の場合は、予測で何もしないことを除いて、コードは正常に見えます。このように、たとえば、あなたが変数に格納していることを確認してください:

prediction = model.predict(np.array(tk.texts_to_sequences(text))) 
print(prediction) 
+0

はkerasソフトマックス確率を使用して唯一の上位k個を印刷する方法はありますか? – donald

+0

@donaldはい。単に 'top_k_categorical_accuracy 'を' fit() 'のメトリックに追加してください。 – nemo

1

私はいくつかのデータに非線形回帰を実行するためにKerasでニューラルネットワークを訓練しました。これは、以前に保存されたモデル構成と重みを使用して新しいデータをテストするためのコードの一部です。

fname = r"C:\Users\tauseef\Desktop\keras\tutorials\BestWeights.hdf5" 
modelConfig = joblib.load('modelConfig.pkl') 
recreatedModel = Sequential.from_config(modelConfig) 
recreatedModel.load_weights(fname) 
unseenTestData = np.genfromtxt(r"C:\Users\tauseef\Desktop\keras\arrayOf100Rows257Columns.txt",delimiter=" ") 
X_test = unseenTestData 
standard_scalerX = StandardScaler() 
standard_scalerX.fit(X_test) 
X_test_std = standard_scalerX.transform(X_test) 
X_test_std = X_test_std.astype('float32') 
unseenData_predictions = recreatedModel.predict(X_test_std) 
関連する問題