Python RNN中的最后一层-密度,LSTM,GRU。。。?

Python RNN中的最后一层-密度,LSTM,GRU。。。?,python,tensorflow,keras,deep-learning,Python,Tensorflow,Keras,Deep Learning,我知道您可以在Keras的RNN体系结构中使用不同类型的层,这取决于您遇到的问题类型。我指的是例如layers.SimpleRNN,layers.LSTM或layers.GRU 假设我们有(Keras中的函数API): 其中,lstm\u 3是最后一层 将其作为LSTM层有意义吗?或者它必须是不同类型的图层?因为我两个都见过 例如,这里(这次是使用顺序API): TL;两者都是有效的选择 总的来说,这取决于您想要的输出类型,或者更准确地说,您想要的输出来自哪里。您可以直接使用LSTM图层的输出,

我知道您可以在Keras的RNN体系结构中使用不同类型的层,这取决于您遇到的问题类型。我指的是例如
layers.SimpleRNN
layers.LSTM
layers.GRU

假设我们有(Keras中的函数API):

其中,
lstm\u 3
是最后一层

将其作为LSTM层有意义吗?或者它必须是不同类型的图层?因为我两个都见过

例如,这里(这次是使用顺序API):


TL;两者都是有效的选择

总的来说,这取决于您想要的输出类型,或者更准确地说,您想要的输出来自哪里。您可以直接使用LSTM图层的输出,也可以使用密集图层(带或不带图层)。在最终LSTM之后添加另一个密集层的一个原因是允许模型更具表现力(也更容易过度拟合)。因此,是否使用最终的致密层取决于实验

inputs = tf.keras.Input(shape=(timesteps, features), name='input')
lstm_1 = layers.LSTM(64, return_sequences=True, name='lstm_1')(inputs)
lstm_2 = layers.LSTM(64, return_sequences=True, name='lstm_2')(lstm_1)
# last lstm layer
lstm_3 = layers.LSTM(64, return_sequences=False, name='lstm_3')(lstm_2)
model = keras.Model(inputs=inputs, outputs=lstm_3, name='rnn_example')
#print(model.summary())
inputs = tf.random.normal([32, timesteps, features])
print(model(inputs).shape)
model = keras.Sequential()

model.add(
    layers.Bidirectional(layers.LSTM(64, return_sequences=True), input_shape=(timesteps, features))
)
# Second Bidirectional layer
model.add(layers.Bidirectional(layers.LSTM(32)))
# Output
model.add(layers.Dense(10))

model.summary()