Как использовать загруженную модель внимания LSTM для прогнозирования ввода?

Я полный новичок в Deep Learning & Keras. Я хочу построить иерархическую сеть внимания, которая помогает классифицировать комментарии по нескольким категориям, а именно. токсичный, сильно токсичный и т.д. Я взял код из открытого репозитория и сохранил модель. Затем я загрузил модель, используя model_from_json. Теперь я хочу использовать эту загруженную модель для прогнозирования входного текста (данного как ввод Python или как отдельный файл).

Это код, который я использую: https://www.kaggle.com/sermakarevich/hierarchical-attention-network/notebook

Затем я сделал:

model_json = model.to_json()
with open("model.json", "w") as json_file:
    json_file.write(model_json)
model.save_weights("model.h5")
print("Saved model to disk")

Затем в отдельном файле:

json_file = open('model.json', 'r')
loaded_model_json = json_file.read()
json_file.close()
loaded_model = model_from_json(loaded_model_json,custom_objects={'AttentionWithContext':AttentionWithContext})
loaded_model.load_weights("model.h5")
print("Loaded model from disk")

Я отлично получаю «загруженную модель с диска». Я хочу знать формат, в котором мне нужно вводить данные, и как фрагмент кода использовать модель для ее классификации. Поскольку у меня мало знаний об этом, было бы очень полезно, если бы кто-нибудь помог мне с кодом, специфичным для Python, чтобы заставить его работать.


person Code231    schedule 10.10.2019    source источник


Ответы (1)


При прогнозировании убедитесь, что вы также используете токенизатор, иначе вывод будет неверным.

    new = ["Your_text_that_you_want_to_check"]
    seq = tokenizer.texts_to_sequences(new)
    padded = pad_sequences(seq, maxlen=MAX_SEQUENCE_LENGTH)
    pred = model.predict(padded)

При прогнозировании очень важно преобразовать ваш новый текст в вектор, чтобы ваша модель была обучена. Я преобразовал свои тренировочные данные в последовательность, а затем дополнил их нулем, чтобы длина была такой же, и те же шаги, которые я повторял при прогнозировании. Но убедитесь, что вы замариновали свой токензиер. Я надеюсь, что это помогает! Дайте мне знать, если у вас возникли трудности с пониманием шагов.

person Sagar Dubey    schedule 11.10.2019
comment
После сохранения модели я добавил следующее: с open('tokenizer.pickle','wb') в качестве дескриптора: pickle.dump(tokenizer,handle,protocol=pickle.HIGHEST_PROTOCOL) И в файле, где я загружаю модель, я добавлено следующее: texts=[hey] с open('tokenizer.pickle','rb') в качестве дескриптора: tk=pickle.load(handle) tk.fit_on_texts(texts) index_list = tk.texts_to_sequences(texts) data = pad_sequences (index_list, maxlen=1) y =loaded_model.predict(data) Я получаю сообщение об ошибке: ValueError: Ошибка при проверке ввода: ожидается, что input_2 будет иметь 3 измерения, но получен массив формы (1, 1) - person Code231; 13.10.2019
comment
привет @Code231 снова не подходит к тексту. Вам не нужно писать эту строку tk.fit_on_texts(texts) и следить за тем, чтобы maxlen был одинаковым во время тренировки и в этой части. вы использовали 1 как maxlen, поэтому убедитесь, что во время тренировки вы использовали тот же maxlen. with open('tokenizer.pickle','rb') as handle: tk=pickle.load(handle) texts=[ "hey"] index_list = tk.texts_to_sequences(texts) data = pad_sequences(index_list, maxlen=max_len_you_used_while_training) y =loaded_model.predict(data) - person Sagar Dubey; 14.10.2019