【问题标题】:return_sequences in LSTMLSTM 中的 return_sequences
【发布时间】:2021-01-10 00:18:38
【问题描述】:

在 Keras 中,model.add(LTSM(units=xx, return_sequences = yy, input_shape=zz), 将return_sequences 设置为true 时,是否意味着拥有/启用蓝色圆圈的箭头,而不是拥有/禁用当 return_sequences 设置为 false 时,箭头以红色圈出?反之亦然? 注意图片来自这个页面:https://www.analyticsvidhya.com/blog/2017/12/fundamentals-of-deep-learning-introduction-to-lstm/ under '4. LSTMs的架构

【问题讨论】:

    标签: machine-learning keras lstm


    【解决方案1】:

    首先,蓝色圆圈是 LSTM 的精髓,它永远不会被禁用,否则你将根本没有 rnn/lstm。该箭头意味着无论您从最后一个 rnn/lstm 单元获得的值是什么,您都会将其传递给下一个 rnn/lstm 单元,并且它将与下一个输入一起处理。 rnn 和 lstm 的唯一区别是简单的 rnn 没有那个蓝色圆圈的箭头,只有下面的黑色箭头,而 lstm 有那个箭头作为短期/长期记忆的门。

    其次,对于return_sequences,它通常用于堆叠的rnn/lstm,这意味着您将一层rnn/lstm垂直堆叠在另一层之上,而不是水平堆叠。水平的 rnn/lstm 单元表示跨时间的处理,而垂直的 rnn/lsm 单元表示将一层堆叠到另一层。

    当您将其设置为 false 时,这意味着只有最后一个单元格(水平)将具有红色圆圈箭头,而所有其他单元格(在同一层中)将禁用该红色圆圈箭头,因此您只会传递一条信息从所有水平层(即该层中最后一个单元格传递的信息)。

    相反,当您将其设置为 true 时,该水平图层中的所有单元格都将启用红色圆圈箭头,并将信息传递到堆叠在其顶部的图层。这意味着如果你想将一个 rnn/lstm 层堆叠在另一个之上,你需要将其设置为 true。

    最后,有关更多信息,您可以参考这本书。它对这个 return_sequences 选项有很好的解释:https://www.oreilly.com/library/view/hands-on-machine-learning/9781492032632/

    【讨论】:

    • 谢谢!非常好的资料!我有几个后续问题: - 你如何垂直和水平堆叠图层?这是垂直的吗? model.add(LSTM(units=xx, return_sequences=True, input_shape=zz)) model.add(LSTM(units=xx2)) - 垂直堆叠和水平堆叠有什么好处?
    • 是的,这是垂直的。对于“水平”,它仅表示跨时间的处理。所以你不需要做任何水平堆叠 rnn/lstm 的事情。它只是指 rnn 和 lstm 跨时间(在每个时间步)处理和接受输入的事实,它是递归神经网络的本质。对于“垂直”,它与将一个密集层堆叠在另一个之上相同,它只是从下面的层获取输入并再次处理它。垂直堆叠的好处与堆叠另一个密集层相同,它只是使其能够适应更复杂的模式。
    • 谢谢!在哪种情况下,您会设置 return_sequences=True 还是 false? (如果你已经有多个垂直层)
    • 在各种场景中只要在其上再有一个rnn/lstm层。如果你没有在底层设置它为真,那么顶层 rnn/lstm 层会抛出一个错误消息。
    猜你喜欢
    • 2020-09-23
    • 2018-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-10
    • 2023-01-03
    • 1970-01-01
    • 2017-08-03
    相关资源
    最近更新 更多