首页 > 解决方案 > RNN 中的最后一层 - Dense、LSTM、GRU ......?

问题描述

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

假设我们有(使用 Keras 中的功能 API):

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)

lstm_3最后一层在哪里。

将其作为 LSTM 层有意义吗?还是必须是不同类型的图层?因为我都见过。

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

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()

标签: pythontensorflowkerasdeep-learning

解决方案


TL;DR 两者都是有效的选择。

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


推荐阅读