2016-06-18 10 views
28

Ich spiele mit dem Reuters-Beispiel-Datensatz und es läuft gut (mein Modell ist trainiert). Ich habe gelesen, wie man ein Modell speichert, damit ich es später wieder verwenden kann. Aber wie verwende ich dieses gespeicherte Modell, um einen neuen Text vorherzusagen? Benutze ich models.predict()?Keras, wie kann ich vorhersagen, nachdem ich ein Modell trainiert habe?

Muss ich diesen Text auf besondere Weise vorbereiten?

Ich versuchte es mit

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 die Prognosen mit einem ausgebildeten Modell zu machen?

Antwort

23

model.predict() erwartet, dass der erste Parameter ein numpy Array ist. Sie liefern eine Liste, die nicht das shape Attribut ein numpiges Array hat.

Ansonsten sieht Ihr Code gut aus, außer dass Sie nichts mit der Vorhersage machen. Stellen Sie sicher, speichern Sie es in einer Variablen, zum Beispiel wie folgt aus:

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

ist es eine Möglichkeit, nur Top-k mit keras softmax Wahrscheinlichkeit zu drucken? – donald

+0

@donald Ja. Fügen Sie einfach 'top_k_categorical_accuracy' zu Ihren Metriken in 'fit()' hinzu. – nemo

1

ich ein neuronales Netzwerk in Keras trainiert auf einige Daten nicht lineare Regression auszuführen. Dies ist ein Teil meines Codes zum Testen neuer Daten mit zuvor gespeicherter Modellkonfiguration und Gewichten.

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)