Je joue avec l'ensemble de données reuters-example et tout fonctionne bien (mon modèle est formé). J'ai lu comment sauvegarder un modèle pour pouvoir le charger plus tard et l'utiliser à nouveau. Mais comment utiliser ce modèle enregistré pour prédire un nouveau texte? Est-ce que j'utilise models.predict()
?
Dois-je préparer ce texte de manière spéciale?
J'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 reçois 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 sur la façon de faire des prévisions avec un modèle formé?
model.predict()
s'attend à ce que le premier paramètre soit un tableau numpy. Vous fournissez une liste qui ne possède pas l'attribut shape
d'un tableau numpy.
Sinon, votre code paraît bien, sauf que vous ne faites rien avec la prédiction. Assurez-vous de le stocker dans une variable, par exemple comme ceci:
prediction = model.predict(np.array(tk.texts_to_sequences(text)))
print(prediction)
model.predict_classes(<numpy_array>)
Exemple https://Gist.github.com/alexcpn/0683bb940cae510cf84d5976c1652abd
J'ai formé un réseau de neurones à Keras pour effectuer une régression non linéaire sur certaines données. Ceci fait partie de mon code pour tester de nouvelles données en utilisant une configuration de modèle et des 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)
Vous devez utiliser le même Tokenizer que vous avez utilisé pour construire votre modèle!
Sinon, cela donnera un vecteur différent à chaque mot.
Ensuite, j'utilise:
phrase = "not good"
tokens = myTokenizer.texts_to_matrix([phrase])
model.predict(np.array(tokens))