在 Keras,当我创建一个带有 n 个单元的有状态“ LSTM”层时,我到底在配置什么?

正常 Dense层中的第一个参数也是 units,它是该层中的神经元/节点数。然而,一个标准的 LSTM 单元看起来如下:

enter image description here

(这是“ 了解 LSTM 网络”的修改版本)

在 Keras,当我创建一个类似于这个 LSTM(units=N, ...)的 LSTM 对象时,我实际上是在创建这些 LSTM 单元的 N吗?或者是 LSTM 单元中的“神经网络”层的大小,也就是公式中的 W层?还是别的什么?

对于上下文,我的工作基于 这个示例代码

以下是文档: https://keras.io/layers/recurrent/

上面写着:

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

它使我认为它是数量的输出从克拉斯 LSTM“层”对象。这意味着下一层将有 N输入。这是否意味着在 LSTM 层实际上存在这些 LSTM 单元的 N,或者也许正是那个 LSTM 单元在 N迭代中运行,输出这些 h[t]值的 N,比如从 h[t-N]h[t]

如果它只定义了输出的数量,这是否意味着输入仍然可以只是 ,或者我们必须手动创建滞后输入变量 x[t-N]x[t],每个 LSTM 单元由 units=N参数定义一个?

在我写这篇文章的时候,我想到了 return_sequences这个参数的作用。如果设置为 True,所有的 N输出将被传递到下一层,而如果设置为 False,它只将最后的 h[t]输出传递到下一层。我说的对吗?

41143 次浏览

您可以检查 这个问题以获得更多信息,尽管它是基于 Kera-1.x API 的。

基本上,unit表示 LSTM 中内细胞的尺寸。因为在 LSTM 中,内单元的维数(图中的 C _ t 和 C _ { t-1})、输出掩码(图中的 o _ t)和隐藏/输出状态(图中的 h _ t)应该有 一样维,所以输出的维数也应该是 unit长度。

而 Keras 的 LSTM只定义了一个具有 unit长度的 LSTM 块。如果你设置 return_sequence=True,它将返回一些形状: (batch_size, timespan, unit)。如果是 false,那么它只返回形状为 (batch_size, unit)的最后一个输出。

至于输入,您应该为每个时间戳提供输入。基本上,形状像 (batch_size, timespan, input_dim),其中 input_dim可以不同于 unit。如果只想在第一步提供输入,那么只需在其他时间步骤中用零填充数据即可。

这是否意味着在 LSTM 层中实际存在 N 个这样的 LSTM 单元,或者也许正是这样一个 LSTM 单元在 N 次迭代中运行,从 h [ t-N ]到 h [ t ]输出这些 h [ t ]值的 N?

第一个是正确的。在那个 KerasLSTM 层中有 N 个 LSTM 单元或单元。

keras.layers.LSTM(units, activation='tanh', recurrent_activation='hard_sigmoid', use_bias=True, kernel_initializer='glorot_uniform', recurrent_initializer='orthogonal', bias_initializer='zeros', unit_forget_bias=True, kernel_regularizer=None, recurrent_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, recurrent_constraint=None, bias_constraint=None, dropout=0.0, recurrent_dropout=0.0, implementation=1, return_sequences=False, return_state=False, go_backwards=False, stateful=False, unroll=False)

如果你计划用一个单元创建一个简单的 LSTM 层,你将以下面这个结束: enter image description here 这就是你的模型。

N=1
model = Sequential()
model.add(LSTM(N))

对于其他模型,需要 N > 1 enter image description here

“ LSTM 链”的实例数

对于克拉斯循环神经网络的“单位”参数的合理直观的解释是,在 units=1中,你得到了教科书中描述的 RNN,而在 units=n中,你得到了一个由这种 RNN 的 n独立拷贝组成的层——它们将具有相同的结构,但是由于它们将用不同的权值进行初始化,它们将计算不同的东西。

或者,您可以考虑在具有 units=1的 LSTM 中,键值(f,i,C,h)是标量的; 对于 units=n,它们将是长度为 n的向量。

“直观地”就像一个密度为100的稠密层(稠密(100))将会有100个神经元。同样,LSTM (100)将是一个由100个“智能神经元”组成的层,其中每个神经元都是你提到的图形,输出将是一个100维的矢量