it-swarm.com.de

Keras, wie kann ich vorhersagen, nachdem ich ein Modell trainiert habe?

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?

50
ben

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)
36
nemo
model.predict_classes(<numpy_array>)

Beispiel https://Gist.github.com/alexcpn/0683bb940cae510cf84d5976c1652abd

4
Alex Punnen

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)
1

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))
0
Thomas Decaux