私はロイターの例のデータセットで遊んでいて、それはうまく動く(私のモデルは訓練されている)。モデルを保存する方法について読んだので、後で再度使用するために読み込むことができます。しかし、この保存モデルを使用して新しいテキストを予測するにはどうすればよいでしょうか。 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'
訓練を受けたモデルを使用して予測を行う方法について何かアドバイスがありますか?
model.predict()
最初のパラメータは派手な配列であることを期待しています。リストを指定します。このリストには、numpy配列にあるshape
属性はありません。
それ以外の場合、コードは問題なく表示されます。ただし、予測には何もしていません。次のように、必ず変数に格納してください。
prediction = model.predict(np.array(tk.texts_to_sequences(text)))
print(prediction)
model.predict_classes(<numpy_array>)
サンプル https://Gist.github.com/alexcpn/0683bb940cae510cf84d5976c1652abd
私はいくつかのデータに対して非線形回帰を実行するために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)
モデルの構築に使用したのと同じトークナイザーを使用する必要があります。
そうでなければ、これは各単語に異なるベクトルを与えるでしょう。
それで、私は使っています:
phrase = "not good"
tokens = myTokenizer.texts_to_matrix([phrase])
model.predict(np.array(tokens))