关于 Keras 循环单元格的说明

数据挖掘 Python 深度学习 nlp 喀拉斯 rnn
2021-09-29 14:06:19

我粘贴在循环层的 Keras 文档下方

model= Sequential()
model.add(LSTM(32, input_shape=(10, 64)))

# now model.output_shape == (None, 32)
# note: `None` is the batch dimension.

LSTM 32 的第一个参数在这里是什么意思?它是否创建了 32 个 LSTM 块(我的块是指由输入、遗忘和输出门组成)?您能否解释一下第一个参数的含义以及当返回序列为 True 和返回序列为 False 时它对 LSTM 的输出维度有何贡献?

3个回答

LSTM 使用的符号很混乱,我也花了一些时间来理解这个问题。当你看到这张图(通常用来解释 RNN)时:

在此处输入图像描述

您需要考虑 X 是时间步长 t 的数据序列,它不仅仅是单个标量输入值(正如我们习惯于使用前馈网络);它是一个数据数组/张量。该图显示了在时间步 t 处如何有一个输出,但是当下一个数组/张量被输入时,它也会输入到下一个时间步 t+1。

更好/更清晰的方法(在我看来)是这样看的:

在此处输入图像描述

所以一个 LSTM 'cell' 实际上是你可能认为的一个层。一个单位(其中一个圆圈)是其中之一:

在此处输入图像描述

您可以考虑隐藏层中的神经元。

最初,我以为这是一个单元,但它不是,它是一个单元。因此,例如,当您指定 32 个单元时,您实际上是在说单元(层)中需要多少个这些单元(神经元)。

这就是使模型能够学习呈现给它的数据的能力。就像前馈中的隐藏层/神经元一样,它是一个你需要试验的超参数;太低,模型会欠拟合,太高,模型会过拟合。

在这种情况下,值“32”是单元状态的大小和在网络中向前发送的隐藏状态的大小。在此处查看我的答案以获取更多信息。

这个问题可能太老了,但我认为 BigBadMe 的答案不正确。正如 keras 文档所说:

单位:正整数,输出空间的维度。

单元的数量实际上是隐藏状态(或输出)的维度。

例如,在下图中,隐藏状态(红色圆圈)的长度为 2。单元数是连接到包含隐藏状态和输入的连接向量的层(同时包含红色和绿色的层)的神经元数量下面的圆圈)。在这个例子中,有 2 个神经元连接到该层。

单元的数量定义了隐藏状态(或输出)的维度和 LSTM 层中的参数数量。

在此处输入图像描述

上图取自:https ://towardsdatascience.com/counting-no-of-parameters-in-deep-learning-models-by-hand-8f1716241889 ,这是一篇对 LSTM 很有帮助的文章