Как я могу проверить модель, которую я создал с Keras - PullRequest
0 голосов
/ 27 апреля 2019

Я работал над проблемой классификации текста с Keras.Но я пытался протестировать созданную мной модель, но я не могу использовать TfidfVectorizer для тестирования класса.

with open('model_architecture.json', 'r') as f:
model = model_from_json(f.read())

model.load_weights('model_weights.h5')

После установки модели я подготовил список тестов для использования.

test_data=["sentence1","sentence2","sentence3"]

Пока проблем нет

Но ..

tf=TfidfVectorizer(binary=True)
train=tf.fit_transform(test_data)
test=tf.transform(test_data)
print(model.predict_classes(test))

ValueError: Error when checking input: expected dense_1_input to have shape (11103,) but got array with shape (92,)

Я получаю такую ​​ошибку

И я тоже пытался

tf=TfidfVectorizer(binary=True)
test=tf.transform(test_data)

sklearn.exceptions.NotFittedError: TfidfVectorizer - Vocabulary wasn't fitted.

но яПолучив такую ​​ошибку, я узнал, что метод fit () должен появиться до того, как его нельзя будет использовать.

Но я все еще не могу проверить модель, которую тренирую

1 Ответ

1 голос
/ 27 апреля 2019

Вам необходимо кодировать свои тестовые данные, используя точно такой же объект TfIdfVectorizer, который вы подходили и использовали для преобразования исходных данных обучения, еще тогда, когда вы первоначально обучали модель. Если вы подгоните другой TfidfVectorizer к своим тестовым данным, то кодировка (включая длину вокаба) будет совершенно другой и не будет работать. Именно эта разница в длине речи является непосредственной причиной ошибки, которую вы видите. Однако, даже если вы получите совпадения размеров чисто случайно, это все равно не сработает, потому что модель была обучена с кодировкой, которая отображает «cat» в 42 или что-то еще, пока вы test это кодировка, которая отображает "cat" в 13 или что-то в этом роде. Вы в основном будете кормить ерундой ерунду. В действительности нет другого выбора, кроме как пойти и получить оригинальный TfidfVectorizer или, по крайней мере, приспособить TfidfVectorizer к точно таким же документам с точно такой же конфигурацией. Если это невозможно, вам просто нужно обучить новую модель, и на этот раз не забудьте также сэкономить на TfidfVectorizer.

Обычно встроенная предварительная обработка сохраняется в файл рассола с помощью pickle.dump() во время первоначального обучения и загружается с помощью pickle.load() для тестирования и производства, аналогично тому, что вы делали для model_architecture.json и model_weights.hd5. Также удобно собрать все вместе в sklearn конвейер , так что вам нужно выбрать только один объект, но я не уверен, как это работает вместе с моделью Keras.

...