可以有很多方法来解决这个问题,我正在指定哪种方法可以很好地解决您的问题。
如果你想stack 两个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 # number of classes
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')
## Fit the model
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 层并将其输出 with-out complete sequence 用作分类层的特征。
This 的回答可能有助于理解 LSTM 架构的另一种方法用于不同的目的。