কেরাস, আমি কোনও মডেল প্রশিক্ষণ দেওয়ার পরে কীভাবে পূর্বাভাস দেব?


88

আমি রয়টার্স-উদাহরণস্বরূপ ডেটাসেটের সাথে খেলছি এবং এটি দুর্দান্ত চলছে (আমার মডেল প্রশিক্ষিত)। আমি কোনও মডেলটি কীভাবে সংরক্ষণ করব সে সম্পর্কে পড়েছিলাম, তাই আমি এটি ব্যবহার করতে পরে আবার লোড করতে পারি। তবে কীভাবে আমি এই নতুন সংরক্ষিত মডেলটি কোনও নতুন পাঠ্যের পূর্বাভাস দিতে ব্যবহার করব? আমি কি ব্যবহার করি 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)

কেরাস সফটম্যাক্স সম্ভাব্যতা ব্যবহার করে কেবল শীর্ষ কে মুদ্রণের উপায় আছে?
ডোনাল্ড

4
@ ডোনাল্ড হ্যাঁ আপনার মেট্রিকগুলিতে কেবল 'শীর্ষ_কে_শ্রেণীর_সংক্রান্ততা' যুক্ত করুন 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]])>

0

নতুন টুকরো টেক্সটের জন্য আপনি আপনার টোকেনাইজার এবং প্যাড সিকোয়েন্সিং ব্যবহার করতে পারেন। এটির পরে মডেল পূর্বাভাস। এটি পূর্বাভাসটিকে একটি নমপি অ্যারে প্লাস হিসাবে লেবেল হিসাবে ফিরিয়ে দেবে।

উদাহরণ স্বরূপ:

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)])
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.