Je joue avec le jeu de données de l'exemple de reuters et il fonctionne bien (mon modèle est entraîné). J'ai lu comment enregistrer un modèle afin de pouvoir le charger plus tard pour le réutiliser. Mais comment utiliser ce modèle enregistré pour prédire un nouveau texte? Dois-je utiliser models.predict()
?
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 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édictions avec un modèle entraîné?
fit()
.Échantillon https://gist.github.com/alexcpn/0683bb940cae510cf84d5976c1652abd
la source
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))
la source
J'ai formé un réseau de neurones dans Keras pour effectuer une régression non linéaire sur certaines données. Ceci est une partie de mon code pour tester de nouvelles données en utilisant la configuration et les poids du modèle 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)
la source
Vous pouvez simplement "appeler" votre modèle avec un tableau de la forme correcte:
model(np.array([[6.7, 3.3, 5.7, 2.5]]))
Exemple complet:
from sklearn.datasets import load_iris from tensorflow.keras.layers import Dense from tensorflow.keras.models import Sequential import numpy as np X, y = load_iris(return_X_y=True) model = Sequential([ Dense(16, activation='relu'), Dense(32, activation='relu'), Dense(1)]) model.compile(loss='mean_absolute_error', optimizer='adam') history = model.fit(X, y, epochs=10, verbose=0) print(model(np.array([[6.7, 3.3, 5.7, 2.5]])))
<tf.Tensor: shape=(1, 1), dtype=float64, numpy=array([[1.92517677]])>
la source