Keras,我训练模型后如何预测?

时间:2022-03-03 13:54:37

I'm playing with the reuters-example dataset and it runs fine (my model is trained). I read about how to save a model, so I could load it later to use again. But how do I use this saved model to predict a new text? Do I use models.predict()?

我正在玩路透社示例数据集,它运行正常(我的模型已经过培训)。我读到了如何保存模型,所以我可以稍后加载它再次使用。但是,如何使用此保存的模型来预测新文本?我使用models.predict()吗?

Do I have to prepare this text in a special way?

我是否必须以特殊方式准备此文本?

I tried it with

我尝试过

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)

But I always get

但我总是得到

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

Do you have any recommendations as to how to make predictions with a trained model?

对于如何使用经过训练的模型进行预测,您有什么建议吗?

4 个解决方案

#1


32  

model.predict() expects the first parameter to be a numpy array. You supply a list, which does not have the shape attribute a numpy array has.

model.predict()期望第一个参数是一个numpy数组。您提供了一个列表,该列表没有numpy数组所具有的shape属性。

Otherwise your code looks fine, except that you are doing nothing with the prediction. Make sure you store it in a variable, for example like this:

否则你的代码看起来很好,除了你没有对预测做任何事情。确保将其存储在变量中,例如:

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

#2


3  

model.predict_classes(<numpy_array>)

Sample https://gist.github.com/alexcpn/0683bb940cae510cf84d5976c1652abd

示例https://gist.github.com/alexcpn/0683bb940cae510cf84d5976c1652abd

#3


1  

I trained a neural network in Keras to perform non linear regression on some data. This is some part of my code for testing on new data using previously saved model configuration and weights.

我在Keras训练了一个神经网络,对一些数据进行非线性回归。这是我使用以前保存的模型配置和权重测试新数据的代码的一部分。

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)

#4


0  

You must use the same Tokenizer you used to build your model!

您必须使用用于构建模型的相同Tokenizer!

Else this will give different vector to each word.

否则,这将为每个单词赋予不同的向量。

Then, I am using:

然后,我正在使用:

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

model.predict(np.array(tokens))

#1


32  

model.predict() expects the first parameter to be a numpy array. You supply a list, which does not have the shape attribute a numpy array has.

model.predict()期望第一个参数是一个numpy数组。您提供了一个列表,该列表没有numpy数组所具有的shape属性。

Otherwise your code looks fine, except that you are doing nothing with the prediction. Make sure you store it in a variable, for example like this:

否则你的代码看起来很好,除了你没有对预测做任何事情。确保将其存储在变量中,例如:

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

#2


3  

model.predict_classes(<numpy_array>)

Sample https://gist.github.com/alexcpn/0683bb940cae510cf84d5976c1652abd

示例https://gist.github.com/alexcpn/0683bb940cae510cf84d5976c1652abd

#3


1  

I trained a neural network in Keras to perform non linear regression on some data. This is some part of my code for testing on new data using previously saved model configuration and weights.

我在Keras训练了一个神经网络,对一些数据进行非线性回归。这是我使用以前保存的模型配置和权重测试新数据的代码的一部分。

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)

#4


0  

You must use the same Tokenizer you used to build your model!

您必须使用用于构建模型的相同Tokenizer!

Else this will give different vector to each word.

否则,这将为每个单词赋予不同的向量。

Then, I am using:

然后,我正在使用:

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

model.predict(np.array(tokens))