Saya bermain dengan dataset contoh reuters dan itu berjalan dengan baik (model saya dilatih). Saya membaca tentang cara menyimpan model, sehingga saya dapat memuatnya nanti untuk digunakan lagi. Tapi bagaimana cara menggunakan model tersimpan ini untuk memprediksi teks baru? Apakah saya menggunakan models.predict()
?
Apakah saya harus menyiapkan teks ini dengan cara khusus?
Saya mencobanya dengan
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)
Tapi saya selalu mendapatkannya
(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'
Apakah Anda memiliki rekomendasi tentang cara membuat prediksi dengan model terlatih?
fit()
.Sampel https://gist.github.com/alexcpn/0683bb940cae510cf84d5976c1652abd
sumber
Anda harus menggunakan Tokenizer yang sama dengan yang Anda gunakan untuk membuat model!
Jika tidak, ini akan memberikan vektor yang berbeda untuk setiap kata.
Kemudian, saya menggunakan:
phrase = "not good" tokens = myTokenizer.texts_to_matrix([phrase]) model.predict(np.array(tokens))
sumber
Saya melatih jaringan saraf di Keras untuk melakukan regresi non linier pada beberapa data. Ini adalah beberapa bagian dari kode saya untuk menguji data baru menggunakan konfigurasi dan bobot model yang disimpan sebelumnya.
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)
sumber
Anda cukup "memanggil" model Anda dengan array dengan bentuk yang benar:
model(np.array([[6.7, 3.3, 5.7, 2.5]]))
Contoh lengkap:
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]])>
sumber
Anda dapat menggunakan tokenizer dan pengurutan pad untuk bagian teks baru. Ini diikuti dengan prediksi model. Ini akan mengembalikan prediksi sebagai larik numpy ditambah label itu sendiri.
Sebagai contoh:
new_complaint = ['Your service is not good'] seq = tokenizer.texts_to_sequences(new_complaint) padded = pad_sequences(seq, maxlen=maxlen) pred = model.predict(padded) print(pred, labels[np.argmax(pred)])
sumber