尝试使用预先训练的模型来预测类别时发生UnknownError

时间:2019-07-22 18:54:45

标签: python-3.x tensorflow keras deep-learning

使用下面的教程,我尝试使用model.save()将经过预训练的模型保存到.h5文件中。 https://www.tensorflow.org/tutorials/keras/save_and_restore_models#save_the_entire_model

我已经使用load_model()将此模型加载到了新文档中,当我试图用它来预测新数据时,我遇到了UnknownError。我正在使用tensorflow-gpu

我用于训练模型的代码如下:

import numpy as np
import pandas as pd
import tensorflow as tf
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense, Dropout, Embedding, CuDNNLSTM, Bidirectional
from sklearn.model_selection import train_test_split

"""
My dataset is a two-column DataFrame of which the first column (X) contains
a pre-processed and encoded tweet which has been padded to a length of 47 words. The reason as to why I did this is because I'm passing in these values to an Embedding layer
The second column (Y) is a label associated with that tweet

X_train.shape = (89552, 47)
Y.shape = (89552,)

vocab_size = 66167
max_sent_len = 47
emd_dim = 75
"""
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.2, random_state=420)

x_train, x_val, Y_train, y_val = train_test_split(X_train, y_train, test_size=0.1, random_state=420)

model = Sequential([
    Embedding(input_dim=vocab_size, output_dim=emb_dim, input_length=max_sent_len, trainable=True),
    Bidirectional(CuDNNLSTM(64, return_sequences=False)),
    Dropout(0.5),
    Dense(2, activation='softmax')
])
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

model.fit(x_train, Y_train, epochs=50, batch_size=300, shuffle=True, validation_data=(x_val, y_val))

model.summary()

model.save('trained/model-2-f.h5')

尝试使用此模型进行预测时没有出现任何错误。

我正在尝试测试此模型是否已正确保存在另一个文件中,并使用具有相同属性的另一个数据集对其进行测试。

from tensorflow.keras.models import load_model

trained_model = load_model('trained/model-2-f.h5')

"""
w_x is the data I'm using to predict values for

w_x.shape = (201, 47)
"""

w_pred = trained_model.predict_classes(w_x)

我得到的错误是:

UnknownError                              Traceback (most recent call last)
<ipython-input-18-cd338bbebc52> in <module>
----> 1 w_pred = trained_model.predict_classes(w_x)
      2 w_pred

~\Anaconda3\envs\nlp\lib\site-packages\tensorflow\python\keras\engine\sequential.py in predict_classes(self, x, batch_size, verbose)
    316         A numpy array of class predictions.
    317     """
--> 318     proba = self.predict(x, batch_size=batch_size, verbose=verbose)
    319     if proba.shape[-1] > 1:
    320       return proba.argmax(axis=-1)

~\Anaconda3\envs\nlp\lib\site-packages\tensorflow\python\keras\engine\training.py in predict(self, x, batch_size, verbose, steps, callbacks, max_queue_size, workers, use_multiprocessing)
   1076           verbose=verbose,
   1077           steps=steps,
-> 1078           callbacks=callbacks)
   1079 
   1080   def reset_metrics(self):

~\Anaconda3\envs\nlp\lib\site-packages\tensorflow\python\keras\engine\training_arrays.py in model_iteration(model, inputs, targets, sample_weights, batch_size, epochs, verbose, callbacks, val_inputs, val_targets, val_sample_weights, shuffle, initial_epoch, steps_per_epoch, validation_steps, validation_freq, mode, validation_in_fit, prepared_feed_values_from_dataset, steps_name, **kwargs)
    361 
    362         # Get outputs.
--> 363         batch_outs = f(ins_batch)
    364         if not isinstance(batch_outs, list):
    365           batch_outs = [batch_outs]

~\Anaconda3\envs\nlp\lib\site-packages\tensorflow\python\keras\backend.py in __call__(self, inputs)
   3290 
   3291     fetched = self._callable_fn(*array_vals,
-> 3292                                 run_metadata=self.run_metadata)
   3293     self._call_fetch_callbacks(fetched[-len(self._fetches):])
   3294     output_structure = nest.pack_sequence_as(

~\Anaconda3\envs\nlp\lib\site-packages\tensorflow\python\client\session.py in __call__(self, *args, **kwargs)
   1456         ret = tf_session.TF_SessionRunCallable(self._session._session,
   1457                                                self._handle, args,
-> 1458                                                run_metadata_ptr)
   1459         if run_metadata:
   1460           proto_data = tf_session.TF_GetBuffer(run_metadata_ptr)

UnknownError: 2 root error(s) found.
  (0) Unknown: Fail to find the dnn implementation.
     [[{{node bidirectional_2/CudnnRNN_1}}]]
     [[dense_2/Softmax/_243]]
  (1) Unknown: Fail to find the dnn implementation.
     [[{{node bidirectional_2/CudnnRNN_1}}]]
0 successful operations.
0 derived errors ignored.

0 个答案:

没有答案