首页 > 解决方案 > 嵌入层的意外输出

问题描述

我已经尝试在 Keras 中实现一个 LSTM 几个小时(使用带有嵌入层、两个 LSTM 层和一个密集层的顺序模型),但我最终得到了不同的错误消息。

据我所知,问题在于嵌入层的输出有二维而不是三个,因为我ValueError: Input 0 is incompatible with layer lstm_2: expected ndim=3, found ndim=2在添加第二个 LSTM 层时得到这个值错误(),assert len(input_shape) >= 3 AssertionError当我删除添加的行时得到错误第二个 LSTM 层(这意味着密集层有同样的问题)。

这些错误发生在我调用模型的“训练”方法之前。

我的代码在这里。

from keras.models import Sequential
from keras.layers import Dense, Activation
from keras.layers import LSTM
from keras.layers import Embedding
from keras.layers import TimeDistributed
from keras.preprocessing import text
from keras.preprocessing.sequence import pad_sequences

# The data in X was preprocessed using Keras' built in pad_sequences.
# Before preprocessing, it consisted of plain lists of integers (which
# were just integers wit a one-to-one map to plain words as strings)

X = pad_sequences(X)

model = Sequential()
model.add(Embedding(batch_size=32, input_dim=len(filtered_vocabulary)+1, output_dim=256, input_length=38))
model.add(LSTM(128))
model.add(LSTM(128)) # error occurs in this line
model.add(TimeDistributed(Dense(len(filtered_vocabulary)+1, activation="softmax")))

model.compile(optimizer = "rmsprop", loss="categorical_crossentropy", metrics=["accuracy"])
model.fit(X, X, epochs=60, batch_size=32)

如果你们中的任何人能帮助我解决这个问题,我会很高兴。

标签: pythonkeras

解决方案


发生错误是因为第一个 LSTM 层只返回最后一个输出,因为您没有return_sequences=True在 LSTM 层中指定。这看起来像一个多输出设置,因此您需要在每个时间步使用两个层的该参数返回 LSTM 输出。

只是要清楚,没有return_sequences=True形状是(None, 128); 与形状是(None, 38, 128)


推荐阅读