python - LSTM 嵌入层形状错误

标签 python machine-learning lstm

我有这样的网络架构:

model = Sequential()
model.add(Embedding(9761, 100, input_length=longest_period))
model.add(LSTM(30, dropout=0.2, recurrent_dropout=0.2))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

当我尝试拟合模型时:

res = model.fit(X_train_lsmt, np.array(y_train_lsmt), validation_split=0.25, epochs=2, batch_size=128, verbose=0)

我收到此错误:

ValueError: Error when checking model input: expected
embedding_3_input to have shape (None, 217) but got array 
with shape (3133, 1)

我认为错误可能与单热编码y_train_lsmt有关,其形状为(3133,3)

[[ 0.1.0.] [ 0.1.0.] [ 0.0.1.] ..., [ 1.0.0.] [ 1.0.0.] [0.1.0.]]

但我对此不确定。

更新:

我已经部分解决了添加 Flatten() 层的问题:

model = Sequential()
model.add(Embedding(9761, 100, input_length=stringa_piu_lunga))
model.add(LSTM(units=10, return_sequences=True))
model.add(Flatten())
model.add(Dense(3, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

但现在我在模型评估过程中遇到了同样的错误:

score = model.evaluate(X_test_lsmt, y_train_lsmt, verbose=0)

最佳答案

你的代码看起来不错。将您的 y_train_lstm 更改为分类:

y_train_lstm = keras.utils.to_categorical(y_train_lstm)

或者将损失更改为稀疏_分类_熵:

model.compile(optimizer='adam',
                  loss='sparse_categorical_crossentropy',
                  metrics=['accuracy'])
<小时/>

已编辑:根据您的 github 存储库,评估将无法进行,因为您没有对 x_test_lstm 进行预处理。尝试:

X_test_lstm = sequence.pad_sequences(X_test_lstm, maxlen=longest_string)

关于python - LSTM 嵌入层形状错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51987877/

相关文章:

python - 如何预测不超过目标示例?

machine-learning - CNN SGD损失从较小值跃升至较大值

machine-learning - sklearn中的层次分类

python - 无法正确定义 LSTM 的输入以建模多对一场景

python - ValueError : `validation_split` is only supported for Tensors or NumPy arrays, 发现 : (keras. preprocessing.sequence.TimeseriesGenerator 对象)

tensorflow - Stateful LSTM Tensorflow Invalid Input_h Shape Error

python - 如何在函数中输入未知数量的变量?

python - Pandas 系列作为 namedtuple

python - 如何确保在 headless 模式 Firefox 驱动程序中截取的屏幕截图尺寸始终相同?

Python - 字典理解中的元组解包