केरस, एक मॉडल को प्रशिक्षित करने के बाद मैं कैसे भविष्यवाणी करता हूं?


87

मैं रायटर-उदाहरण डाटासेट के साथ खेल रहा हूं और यह ठीक चलता है (मेरा मॉडल प्रशिक्षित है)। मैंने एक मॉडल को बचाने के तरीके के बारे में पढ़ा, इसलिए मैं इसे बाद में फिर से उपयोग करने के लिए लोड कर सकता था। लेकिन मैं एक नए पाठ की भविष्यवाणी करने के लिए इस सहेजे गए मॉडल का उपयोग कैसे करूं? क्या मैं उपयोग करता हूं models.predict()?

क्या मुझे इस पाठ को एक विशेष तरीके से तैयार करना है?

मैंने इसके साथ प्रयास किया

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)

लेकिन मुझे हमेशा मिलता है

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

क्या आपके पास प्रशिक्षित मॉडल के साथ भविष्यवाणियां करने के तरीके के रूप में कोई सिफारिशें हैं?

जवाबों:


61

model.predict()पहले पैरामीटर के लिए एक सुस्पष्ट सरणी होने की उम्मीद है। आप एक सूची की आपूर्ति करते हैं, जिसके पास नहीं हैshape विशेषता एक संख्यात्मक सरणी है।

अन्यथा आपका कोड ठीक दिखता है, सिवाय इसके कि आप भविष्यवाणी के साथ कुछ नहीं कर रहे हैं। सुनिश्चित करें कि आप इसे एक चर में संग्रहीत करते हैं, उदाहरण के लिए इस तरह:

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

वहाँ केवल kirs सॉफ्टमैक्स प्रायिकता का उपयोग करके केवल शीर्ष k को मुद्रित करने का एक तरीका है?
डोनाल्ड

1
@ डोनाल्ड हां। बस अपने मैट्रिक्स में 'top_k_categorical_accuracy' जोड़ें fit()
nemo


5

आपको अपने मॉडल का निर्माण करने के लिए उसी टोकनिनेज़र का उपयोग करना चाहिए जो आपने उपयोग किया था!

इसके बजाय प्रत्येक शब्द के लिए अलग वेक्टर देगा।

फिर, मैं उपयोग कर रहा हूँ:

phrase = "not good"
tokens = myTokenizer.texts_to_matrix([phrase])

model.predict(np.array(tokens))

1

मैंने कुछ डेटा पर गैर रेखीय प्रतिगमन करने के लिए केरस में एक तंत्रिका नेटवर्क को प्रशिक्षित किया। यह पहले से सहेजे गए मॉडल कॉन्फ़िगरेशन और वेट का उपयोग करके नए डेटा पर परीक्षण के लिए मेरे कोड का कुछ हिस्सा है।

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)

1

आप सही आकार की एक सरणी के साथ अपने मॉडल को "कॉल" कर सकते हैं:

model(np.array([[6.7, 3.3, 5.7, 2.5]]))

पूर्ण उदाहरण:

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]])>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.