Как использовать модель Keras для прогнозирования вывода после распаковки модели

Я могу распаковать свою модель RNN на свой веб-сайт, но у меня возникают проблемы с тем, чтобы она предсказывала пустой массив прогнозов, используя список в качестве входных данных (содержит только одну строку с именем text, но должен быть list для предварительной обработки из того, что я собрал ) и я сталкиваюсь с проблемой:

ValueError: Error when checking : expected embedding_1_input to have shape (None, 72) 
but got array with shape (1, 690)

Вот как я в настоящее время выполняю предварительную обработку и прогнозирование с помощью модели:

tokenizer = Tokenizer(num_words = 5000, split=' ')
tokenizer.fit_on_texts([text])
X = tokenizer.texts_to_sequences([text])
X = pad_sequences(X)

prediction = loadedModel.predict(X)
print(prediction)

И вот как я тренировал свою модель:

HIDDEN_LAYER_SIZE = 195         # Details the amount of nodes in a hidden layer.
TOP_WORDS = 5000                # Most-used words in the dataset.
MAX_REVIEW_LENGTH = 500         # Char length of each text being sent in (necessary).
EMBEDDING_VECTOR_LENGTH = 128   # The specific Embedded later will have 128-length vectors to
                                # represent each word.
BATCH_SIZE = 32                 # Takes 64 sentences at a time and continually retrains RNN.
NUMBER_OF_EPOCHS = 10           # Fits RNN to more accurately guess the data's political bias.
DROPOUT = 0.2                   # Helps slow down overfitting of data (slower convergence rate)

# Define the model
model = Sequential()
model.add(Embedding(TOP_WORDS, EMBEDDING_VECTOR_LENGTH, \
            input_length=X.shape[1]))
model.add(SpatialDropout1D(DROPOUT))
model.add(LSTM(HIDDEN_LAYER_SIZE))
model.add(Dropout(DROPOUT))
model.add(Dense(2, activation='softmax'))

# Compile the model
model.compile(loss='categorical_crossentropy', optimizer='adam', \
                metrics=['accuracy'])

#printModelSummary(model)

# Fit the model
model.fit(X_train, Y_train, validation_data=(X_test, Y_test), \
            epochs=NUMBER_OF_EPOCHS, batch_size=BATCH_SIZE)

Как я могу исправить свой код предварительной обработки в кодовом поле, начинающемся с «токенизатора», чтобы перестать получать ValueError? Спасибо, и я определенно могу предоставить больше кода или расширить цель проекта.


person C. Lightfoot    schedule 07.11.2017    source источник


Ответы (1)


Итак, здесь есть две проблемы:

  1. Установите max_len в pad_sequences: кажется, что все ваши тренировочные последовательности были дополнены до длины 72, поэтому вам нужно изменить следующую строку:

    X = pad_sequences(X, max_len=72)
    
  2. Используйте обучение Tokenizer: это тонкая проблема - вы создаете и подгоняете совершенно новый Tokenizer, поэтому он может отличаться от того, который вы использовали для обучения. Это может вызвать проблемы, потому что разные слова могут иметь разные индексы, и это заставит вашу модель работать ужасно. Попробуйте pickle провести обучение Tokenizer и загрузить его во время развертывания, чтобы правильно преобразовывать предложения в точки данных, поступающие в вашу модель.

person Marcin Możejko    schedule 08.11.2017