模型解包后如何使用 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?
谢谢,我绝对可以提供更多代码或扩展项目的目的。
所以这里有两个问题:
在 pad_sequences
中设置 max_len
:似乎你所有的训练序列都被填充到长度 72
所以 - 你需要更改以下行:
X = pad_sequences(X, max_len=72)
使用训练 Tokenizer
:这是一个微妙的问题 - 您正在创建和安装一个全新的 Tokenizer
,因此它可能与您用于训练的不同。这可能会导致问题——因为不同的词可能有不同的索引——这会使你的模型工作起来很糟糕。尝试 pickle
你的训练 Tokenizer
并在部署期间加载它,以便将句子转换为数据点正确地提供给你的模型。
我可以将我的 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? 谢谢,我绝对可以提供更多代码或扩展项目的目的。
所以这里有两个问题:
在
pad_sequences
中设置max_len
:似乎你所有的训练序列都被填充到长度72
所以 - 你需要更改以下行:X = pad_sequences(X, max_len=72)
使用训练
Tokenizer
:这是一个微妙的问题 - 您正在创建和安装一个全新的Tokenizer
,因此它可能与您用于训练的不同。这可能会导致问题——因为不同的词可能有不同的索引——这会使你的模型工作起来很糟糕。尝试pickle
你的训练Tokenizer
并在部署期间加载它,以便将句子转换为数据点正确地提供给你的模型。