有很多方法可以解决这个问题,我在这里指定了一个适合你的方法。
如果您想要堆叠两个 LSTM
层,则可以使用 return-seq
来帮助学习另一个 LSTM
层,如下面的示例所示。
from keras.layers import Dense, Flatten, LSTM, Activation
from keras.layers import Dropout, RepeatVector, TimeDistributed
from keras import Input, Model
seq_length = 15
input_dims = 10
output_dims = 8
n_hidden = 10
model1_inputs = Input(shape=(seq_length,input_dims,))
model1_outputs = Input(shape=(output_dims,))
net1 = LSTM(n_hidden, return_sequences=True)(model1_inputs)
net1 = LSTM(n_hidden, return_sequences=False)(net1)
net1 = Dense(output_dims, activation='relu')(net1)
model1_outputs = net1
model1 = Model(inputs=model1_inputs, outputs = model1_outputs, name='model1')
model1.summary()
_________________________________________________________________
Layer (type) Output Shape Param
=================================================================
input_1 (InputLayer) (None, 15, 10) 0
_________________________________________________________________
lstm_1 (LSTM) (None, 15, 10) 840
_________________________________________________________________
lstm_2 (LSTM) (None, 10) 840
_________________________________________________________________
dense_3 (Dense) (None, 8) 88
_________________________________________________________________
- 另一种选择是将完整的返回序列用作下一层的特征。在这种情况下,制作一个简单的
Dense
层,其输入将为 [batch,seq_len*lstm_output_dims]
。
注意:这些特征对于分类任务可能有用,但通常我们使用堆叠的LSTM层,并将其输出不包括完整序列作为分类层的特征。
此答案可能有助于了解用于不同目的的LSTM架构的其他方法。
model1_outputs
被定义了两次?第一次定义有我不理解的含义吗? - Itamar Mushkin