模型解包后如何使用 Keras 模型预测输出

How to Use Keras Model to Predict Output After Unpacking the Model

我可以将我的 RNN 模型解压缩到我的网站上,但我无法使用列表作为输入来预测一组 numpy 预测(仅包含一个名为 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)

如何在以 "tokenizer" 开头的代码框中修复我的预处理代码以停止获取 ValueError? 谢谢,我绝对可以提供更多代码或扩展项目的目的。

所以这里有两个问题:

  1. pad_sequences 中设置 max_len:似乎你所有的训练序列都被填充到长度 72 所以 - 你需要更改以下行:

    X = pad_sequences(X, max_len=72)
    
  2. 使用训练 Tokenizer:这是一个微妙的问题 - 您正在创建和安装一个全新的 Tokenizer,因此它可能与您用于训练的不同。这可能会导致问题——因为不同的词可能有不同的索引——这会使你的模型工作起来很糟糕。尝试 pickle 你的训练 Tokenizer 并在部署期间加载它,以便将句子转换为数据点正确地提供给你的模型。