【问题标题】:Concatenate outputs of LSTM in Keras在 Keras 中连接 LSTM 的输出
【发布时间】:2019-01-04 01:22:41
【问题描述】:

我打算将所有时间步长输出从 LSTM 馈送到全连接层。但是,以下代码失败。如何通过连接时间步长的每个输出将 LSTM 的 3D 输出减少到 2D?

X = LSTM(units=128,return_sequences=True)(input_sequence)
X = Dropout(rate=0.5)(X)
X = LSTM(units=128,return_sequences=True)(X)
X = Dropout(rate=0.5)(X)
X = Concatenate()(X)
X = Dense(n_class)(X)
X = Activation('softmax')(X)

【问题讨论】:

    标签: keras nlp deep-learning lstm recurrent-neural-network


    【解决方案1】:

    @todays 答案的补充: 似乎您只想使用 return_sequences 将其连接成密集层。如果您还没有尝试使用 return_sequences=False,我建议您这样做。 return_sequences 的主要目的是堆叠 LSTMS 或进行 seq2seq 预测。在您的情况下,只使用 LSTM 就足够了。

    【讨论】:

    • 感谢您的建议。我试过return_sequences=False,所以我可能想看看这种方法的效果。
    【解决方案2】:

    您可以使用Flatten 层将 LSTM 层的 3D 输出展平为 2D 形状。

    附带说明,最好使用LSTM layerdropoutrecurrent_dropout 参数,而不是直接将Dropout 层与循环层一起使用。

    【讨论】:

    • 谢谢!您能否解释一下为什么将它们用作 LSTM 层的参数更好?
    • @XINLIU 本质上,在循环层中应用 dropout 的正确方法是在每个时间步使用 same dropout 掩码。它不应该随时间变化,因为它会阻碍学习过程。我认为 Yarin Gal 第一次在他的PhD thesis 中展示了这一点。您可以设置两个参数(注意它们是不同的东西)并将结果与​​使用 Dropout 层时得到的结果进行比较。
    • 谢谢!在 Keras 中有一个 CuDNNLSTM 层。但是,CuDNNLSTM 层中没有“dropout”或“recurrent_dropout”参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-03
    • 2018-06-30
    • 2018-09-14
    • 1970-01-01
    • 1970-01-01
    • 2019-12-03
    • 1970-01-01
    相关资源
    最近更新 更多