Создание прогнозов на один просмотр из входного текста с использованием сохраненной модели CNN - PullRequest
0 голосов
/ 29 ноября 2018

Я делаю классификатор на основе модели CNN в Керасе.

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

Дело в том, что я также использую вложения GloVe, а модель CNN также использует дополненные текстовые последовательности.

Я использовал токенизатор Keras следующим образом:

tokenizer = text.Tokenizer(num_words=max_features, lower=True, char_level=False)
tokenizer.fit_on_texts(list(train_x))

train_x = tokenizer.texts_to_sequences(train_x)
test_x = tokenizer.texts_to_sequences(test_x)

train_x = sequence.pad_sequences(train_x, maxlen=maxlen)
test_x = sequence.pad_sequences(test_x, maxlen=maxlen)

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

Но моя проблема здесь в том, что если я предоставлю один отзыв, ончтобы пройти через tokeniser.text_to_sequences(), который возвращает двумерный массив, с формой (num_chars, maxlength) и, следовательно, с последующими предсказаниями num_chars, но мне нужно в форме (1, max_length).

Я используюследующий код для прогноза:

review = 'well free phone cingular broke stuck not abl offer kind deal number year contract up realli want razr so went look cheapest one could find so went came euro charger small adpat made fit american outlet, gillett fusion power replac cartridg number count packagemay not greatest valu out have agillett fusion power razor'
xtest = tokenizer.texts_to_sequences(review)
xtest = sequence.pad_sequences(xtest, maxlen=maxlen)

model.predict(xtest)

Вывод:

array([[0.29289   , 0.36136267, 0.6205081 ],
       [0.362869  , 0.31441122, 0.539749  ],
       [0.32059124, 0.3231736 , 0.5552745 ],
       ...,
       [0.34428033, 0.3363668 , 0.57663095],
       [0.43134686, 0.33979046, 0.48991954],
       [0.22115968, 0.27314988, 0.6188136 ]], dtype=float32)

Мне нужен один прогноз здесь array([0.29289 , 0.36136267, 0.6205081 ]), так как у меня есть один отзыв.

1 Ответ

0 голосов
/ 29 ноября 2018

Проблема в том, что вам нужно передать список строк в метод texts_to_sequences.Поэтому вам нужно поместить один отзыв в список, подобный следующему:

xtest = tokenizer.texts_to_sequences([review])

Если вы этого не сделаете (то есть передаете строку, а не список строк), учитывая строки вPython является итеративным, он будет перебирать по символам данной строки и рассматривать символы, а не слова, как токены:

oov_token_index = self.word_index.get(self.oov_token)
for text in texts:  # <-- it would iterate over the string instead
    if self.char_level or isinstance(text, list):

Вот почему вы получите массив формы(num_chars, maxlength) как возвращаемое значение метода texts_to_sequences.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...