什么是使用Keras的RNN Layer的return_state输出

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是使用Keras的RNN Layer的return_state输出相关的知识,希望对你有一定的参考价值。

我查看了LSTM层的Keras文档,有关RNN参数的信息如下:

keras.layers.LSTM(units, return_state=True)

参数:

return_state:布尔值。是否返回除输出之外的最后一个状态。

输出形状

if return_state:张量列表。第一个张量是输出。其余的张量是最后的状态,每个状态都有形状(batch_size,units)

这就是关于RNN的return_state的所有信息。作为一个初学者,很难理解究竟是什么意思,剩下的张量是最后的状态,每个状态都有形状(batch_size,units),不是吗?

我知道有细胞状态c和隐藏状态a将被传递到下一个时间步骤。

但是当我进行在线课程的编程练习时,我遇到了这个问题。以下是作业给出的提示。但我不明白这三种产出意味着什么。

from keras.layers import LSTM
LSTM_cell = LSTM(n_a, return_state = True)
a, _, c = LSTM_cell(input_x, initial_state=[a, c])

有人说,他们分别是(https://machinelearningmastery.com/return-sequences-and-return-states-for-lstms-in-keras/):

1最后一个时间步的LSTM隐藏状态输出。

2 LSTM隐藏状态输出为最后一个时间步骤(再次)。

3最后一步的LSTM单元状态。

我总是将输出a视为LSTM的隐藏状态输出,c视为单元状态输出。但是这个人说第一个输出是lstm输出,而第二个输出是隐藏状态输出,这与在线课程指令给出的提示不同(因为提示使用第一个输出作为下一个时间步的隐藏状态输出)。

谁能告诉我更多关于这个的事情?

对于一个更普遍的问题,比如在这种情况下,Keras没有给出初学者友好的可理解的文档或示例,如何更有效地学习Keras?

答案

想想你将如何开始LSTM的迭代。你有一个隐藏状态c,输入x,但你还需要一个所谓的先前输出h,它与x连接。因此,LSTM有两个需要初始化的隐藏张量:ch。现在h碰巧是前一个州的输出,这就是为什么你把它作为输入与c一起传递的原因。设置return_state=True时,返回ch。与输出一起,您将获得3个张量。

以上是关于什么是使用Keras的RNN Layer的return_state输出的主要内容,如果未能解决你的问题,请参考以下文章

keras中双向LSTM流程的验证

关于在 RNN (Keras) 中正确使用 dropout

什么时候在keras的源代码中调用了Layer.build()?

使用Keras与LSTM和RNN进行斗争

Keras 如何处理单元格和隐藏状态(RNN、LSTM)的初始值以进行推理?

Keras 中的动态 RNN:使用自定义 RNN 单元在每个时间步跟踪其他输出