Ich spiele mit dem reuters-Beispieldatensatz und es läuft gut (mein Modell ist trainiert). Ich habe gelesen, wie man ein Modell speichert, damit ich es später laden kann, um es erneut zu verwenden. Wie verwende ich dieses gespeicherte Modell, um einen neuen Text vorherzusagen? Benutze ich models.predict()
?
Muss ich diesen Text auf besondere Weise vorbereiten?
Ich habe es mit versucht
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)
Aber ich bekomme immer
(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'
Haben Sie Empfehlungen, wie Sie mit einem trainierten Modell Vorhersagen treffen können?
model.predict()
erwartet, dass der erste Parameter ein numpy-Array ist. Sie geben eine Liste an, die nicht über das shape
-Attribut eines numpy-Arrays verfügt.
Ansonsten sieht Ihr Code gut aus, außer dass Sie mit der Vorhersage nichts unternehmen. Stellen Sie sicher, dass Sie es in einer Variablen speichern, zum Beispiel wie folgt:
prediction = model.predict(np.array(tk.texts_to_sequences(text)))
print(prediction)
model.predict_classes(<numpy_array>)
Beispiel https://Gist.github.com/alexcpn/0683bb940cae510cf84d5976c1652abd
In Keras habe ich ein neuronales Netzwerk trainiert, um für einige Daten eine nichtlineare Regression durchzuführen. Dies ist ein Teil meines Codes zum Testen neuer Daten mit zuvor gespeicherten Modellkonfigurationen und Gewichtungen.
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)
Sie müssen den gleichen Tokenizer verwenden, den Sie zum Erstellen Ihres Modells verwendet haben!
Sonst wird jedem Wort ein anderer Vektor verliehen.
Dann verwende ich:
phrase = "not good"
tokens = myTokenizer.texts_to_matrix([phrase])
model.predict(np.array(tokens))