2016-06-18 1 views
28

Je joue avec l'ensemble de données reuters-exemple et il fonctionne bien (mon modèle est formé). J'ai lu sur la façon de sauvegarder un modèle, donc je pourrais le charger plus tard pour l'utiliser à nouveau. Mais comment puis-je utiliser ce modèle enregistré pour prédire un nouveau texte? Est-ce que j'utilise models.predict()?Keras, comment puis-je prédire après avoir entraîné un modèle?

Dois-je préparer ce texte d'une manière spéciale?

Je l'ai essayé avec

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) 

Mais je suis toujours

(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' 

Avez-vous des recommandations quant à la façon de faire des prévisions avec un modèle formé?

Répondre

23

model.predict() s'attend à ce que le premier paramètre soit un tableau numpy. Vous fournissez une liste qui n'a pas l'attribut shape que possède un tableau numpy. Sinon, votre code semble correct, sauf que vous ne faites rien avec la prédiction. Assurez-vous que vous stockez dans une variable, par exemple comme ceci:

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

est-il un moyen d'imprimer uniquement top k en utilisant keras probabilité softmax? – donald

+0

@donald Oui. Ajoutez simplement 'top_k_categorical_accuracy' à vos statistiques dans 'fit()'. – nemo

1

I formé un réseau de neurones dans Keras pour effectuer une régression non linéaire sur certaines données. Cela fait partie de mon code pour tester de nouvelles données en utilisant la configuration et les poids précédemment enregistrés.

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)