Keras 如何为RNN的每个时间戳构建密集层,并反馈每个密集层';将输出转换为RNN?

Keras 如何为RNN的每个时间戳构建密集层,并反馈每个密集层';将输出转换为RNN?,keras,lstm,Keras,Lstm,如图所示,我需要获得每个Lstm时间戳的状态,并将其应用于密集层,以便进行监督学习。然后使用这个密集层的输出以及Lstm下一个时间戳的状态。通常,我希望对RNN的每个步骤应用监督学习,并将输出反馈到下一个时间戳。如何在Keras中实现这一点?您可能希望结合使用密集层上的包装器和LSTM层中的设置。然而,从您发布的图表来看,您似乎没有将密集层的输出用于下一个LTSM。你确定是这样吗 编辑: 据报道,这似乎不可能直接在Keras中实施。这就是他们的建议: 基本上,除了使用@nzw0301建议的解决方


如图所示,我需要获得每个Lstm时间戳的状态,并将其应用于密集层,以便进行监督学习。然后使用这个密集层的输出以及Lstm下一个时间戳的状态。通常,我希望对RNN的每个步骤应用监督学习,并将输出反馈到下一个时间戳。如何在Keras中实现这一点?

您可能希望结合使用密集层上的包装器和LSTM层中的设置。然而,从您发布的图表来看,您似乎没有将密集层的输出用于下一个LTSM。你确定是这样吗

编辑:

据报道,这似乎不可能直接在Keras中实施。这就是他们的建议:

基本上,除了使用@nzw0301建议的解决方法外,您在Keras中不可能尝试这样做

原因是要使用当前时间步的输出作为下一个时间步的输入,基本上需要“深度优先”,即计算所有层的一个时间步,然后计算下一个时间步,依此类推。然而,Keras所做的是在将输出输入到下一层之前计算一层的所有时间步

我相信有三种方法可以做到这一点:

输入一个不完整的序列,如@nzw0301建议的,只查看您感兴趣的输出的时间步。这在计算上不是很有效,但应该是可行的

制作一个自定义图层。该层将在一个时间步使用其输出作为下一个时间步的输入。但是,请注意,这将限于此单层,即不能应用多个层,然后以这种方式获得输出。是一个旧Keras版本的实现,它可以做类似的事情

使用有状态RNN(stateful=True),并使它们一次只读取一个时间步。有状态意味着它们在序列之间保持其隐藏状态,因此它应该有效地像“正常”RNN/LSTM一样工作,只是您只输入长度为1的序列。(然后您可以解释输出并计算下一个时间步的输入。)不过,到目前为止,我自己从未尝试过这种方法


感谢您的回复。可能是我的图表有点混乱,但我需要使用稠密的输出到LSTM层的下一步。我不认为stateful适合我的情况。For stateful可以知道批次之间相同样本索引的状态,但我需要的是在完全相同的批次和相同的样本中,在LSTM层的下一个时间步骤中使用密集层的输出。我同意你使用TimeDistributed wrapper,但我如何将稠密层的输出应用到LSTM的下一步?编辑了我的答案!谢谢!那个讨论真的很有用。很高兴我能帮上忙!