保存的keras模型会在推断时冻结内核

时间:2018-08-29 20:03:56

标签: python tensorflow keras

我遇到的问题是,当我加载序列化的Keras LSTM模型(在单独的机器上,尽管除了GPU之外,配置相同,但配置相同)时,它可以很好地加载,但在使用model.predict()方法时会冻结。

训练模型后(当它仍在内存中时),我使用完全相同的推理方法,并且没有问题。

我这样加载模型:

 def load_ner_model(self):


        mod_name_ext = '{}.h5'.format(self.mod_name)
        mod_path = 'misc/3p_ner/'

        tt_name = '{}_text_tokenizer.pickle'.format(self.mod_name)
        cc_name = '{}_char_tokenizer.pickle'.format(self.mod_name)
        lookup_name = '{}_pos_lookup.pickle'.format(self.mod_name)

        mod_files = [self.mod_name +".h5", tt_name, cc_name, lookup_name]
        for file_name in mod_files:
            if file_name not in os.listdir(os.getcwd()):
                print(file_name)
                client.download_file(databuck, mod_path+ file_name, file_name)

        with open(tt_name, 'rb') as handle:
            self.text_tokenizer = pickle.load(handle)

        with open(cc_name, 'rb') as handle:
            self.char_tokenizer = pickle.load(handle)

        with open(lookup_name, 'rb') as handle:
            self.pos_lookup = pickle.load(handle)

        self.model = keras.models.load_model(mod_name_ext)

然后我准备数据并进行如下推断:

def create_char_arrs(text):
    dummy = 'nada'
    char_arrs = list() 
    terms = text.split()
    doc_res = list()
    for term in terms[0:50]:
        res = char_tokenizer.texts_to_sequences([term])
        doc_res.append(res[0])
    doc_res = sequence.pad_sequences(doc_res, maxlen=18, padding='post')
    char_arrs.append(doc_res)
    char_arrs = sequence.pad_sequences(char_arrs, maxlen=50, padding='post')
    return char_arrs

oos = text_tokenizer.texts_to_sequences([x])
oos = sequence.pad_sequences(oos, maxlen=max_length, padding='post', value=36)
ch = create_char_arrs(x)
res = model.predict([ch, oos])

其结果是它只是冻结了内核,没有错误消息或任何东西。

我之前已经保存并重新加载了许多Keras模型,但从未遇到过此问题。

任何帮助将不胜感激!

0 个答案:

没有答案