我一直在尝试在Keras中实现LSTM几个小时(使用带有嵌入层的顺序模型,两个LSTM层和一个密集层),但我最终得到了不同的错误消息。
据我所知,问题是嵌入层的输出有两个维度而不是三个,因为我在添加第二个LSTM图层时得到这个值错误(ValueError: Input 0 is incompatible with layer lstm_2: expected ndim=3, found ndim=2
),我得到了错误assert len(input_shape) >= 3 AssertionError
当我删除添加第二个LSTM图层的行时(这意味着密集图层具有相同的问题)。
在我调用模型的“train”方法之前发生了这些错误。
我的代码在这里。
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)
如果你们中的任何人能帮助我,我会很高兴。
答案 0 :(得分:0)
发生错误是因为第一个LSTM图层仅返回 last 输出,因为您尚未在LSTM图层中指定return_sequences=True
。这看起来像一个多输出设置,因此您需要使用该参数在每个时间步返回LSTM输出
为了清楚起见,没有return_sequences=True
形状为(None, 128)
;形状为(None, 38, 128)
。