keras中的单词嵌入示例预测每次运行时的不同结果

时间:2017-09-09 09:00:16

标签: python flask tensorflow keras

我正在关注pretrained_word_embeddings并使用以下代码保存模型 print('Saving model to disk ...') model.save('/home/data/pretrained-model.h5'')

然后我使用加载预训练模型 pretrained_model = load_model('/home/data/pretrained-model.h5')

后面的以下代码用于完全预测不同的文本

predict_texts = []  # list of text samples
for predict_name in sorted(os.listdir(PREDICT_TEXT_DATA_DIR)):
    predict_path = os.path.join(PREDICT_TEXT_DATA_DIR, predict_name)
    if os.path.isdir(predict_path):
        for predict_fname in sorted(os.listdir(predict_path)):
            if predict_fname.isdigit():
                predict_fpath = os.path.join(predict_path, predict_fname)
                if sys.version_info < (3,):
                    f = open(predict_fpath)
                else:
                    f = open(predict_fpath, encoding='latin-1')
                predict_text = f.read()
                i = predict_text.find('\n\n')  # skip header
                if 0 < i:
                    predict_text = predict_text[i:]
                predict_texts.append(predict_text)
                f.close()
print('Found %s texts.' % len(predict_texts))
tokenizer.fit_on_texts(predict_texts)
predict_sequences = tokenizer.texts_to_sequences(predict_texts)
predict_data = pad_sequences(predict_sequences, maxlen=MAX_SEQUENCE_LENGTH)
print('Shape of predict data tensor:', predict_data.shape)

x_predict = predict_data
y_predict = pretrained_model.predict(x_predict)
max_val = np.argmax(y_predict)
print('Category it belongs to : ',max_val)

我现在面临的问题是,每次运行上面这段代码时,max_val总是一个不同的值。 如何让预测保持一致?

1 个答案:

答案 0 :(得分:0)

我认为你应该逐一预测,不要合并所有文件的所有文本。

我测试的以下代码没问题:

from __future__ import print_function

import os
import sys
import numpy as np
from keras.preprocessing.text import Tokenizer
from keras.preprocessing.sequence import pad_sequences
from keras.utils import to_categorical
from keras.layers import Dense, Input, GlobalMaxPooling1D
from keras.layers import Conv1D, MaxPooling1D, Embedding
from keras.models import Model
from keras.models import load_model
from keras.preprocessing.text import text_to_word_sequence

MAX_SEQUENCE_LENGTH = 1000
MAX_NB_WORDS = 20000
EMBEDDING_DIM = 100

model = load_model('embedding.h5')

PREDICT_TEXT_DATA_DIR = 'predict_data'
predict_path = os.path.join(PREDICT_TEXT_DATA_DIR, '1.txt')
f = open(predict_path, encoding='utf-8')
predict_text = f.read()
f.close()

texts=[predict_text]
# finally, vectorize the text samples into a 2D integer tensor
tokenizer = Tokenizer(num_words=MAX_NB_WORDS)
tokenizer.fit_on_texts(texts)
sequences = tokenizer.texts_to_sequences(texts)

x_predict = pad_sequences(sequences, maxlen=MAX_SEQUENCE_LENGTH)
print('Shape of predict data tensor:', x_predict.shape)

y_predict = model.predict(x_predict)
max_val = np.argmax(y_predict)
print('Category it belongs to : ',max_val)