Keras, 모델을 훈련시킨 후 어떻게 예측합니까?


87

나는 reuters-example 데이터 세트를 가지고 놀고 있고 잘 실행됩니다 (내 모델은 훈련되었습니다). 모델을 저장하는 방법에 대해 읽었으므로 나중에로드하여 다시 사용할 수 있습니다. 하지만이 저장된 모델을 사용하여 새 텍스트를 예측하려면 어떻게해야합니까? 나는 사용 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()첫 번째 매개 변수는 numpy 배열이 될 것으로 예상합니다. shapenumpy 배열에 있는 속성 이없는 목록을 제공합니다 .

그렇지 않으면 예측에 아무것도하지 않는다는 점을 제외하면 코드가 괜찮아 보입니다. 예를 들어 다음과 같이 변수에 저장해야합니다.

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

keras softmax 확률을 사용하여 top k 만 인쇄하는 방법이 있습니까?
donald

1
@donald 예. 에서 측정 항목에 'top_k_categorical_accuracy'를 추가하기 만하면됩니다 fit().
nemo


5

모델을 구축하는 데 사용한 것과 동일한 Tokenizer를 사용해야합니다!

그렇지 않으면 각 단어에 다른 벡터가 제공됩니다.

그런 다음 사용하고 있습니다.

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

model.predict(np.array(tokens))

1

일부 데이터에 대해 비선형 회귀를 수행하도록 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)

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]])>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.