在Keras中,当我使用N`单位'创建有状态的'LSTM`层时,我究竟在配置什么?

And*_*sen 38 neural-network lstm keras tensorflow

普通Dense层中的第一个参数也是units,并且是该层中的神经元/节点的数量.然而,标准LSTM单元如下所示:

在此输入图像描述

(这是" 理解LSTM网络 " 的重写版本)

在Keras,当我创建这样的LSTM对象LSTM(units=N, ...)时,我实际上是在创建N这些LSTM单元吗?或者它是LSTM单元内"神经网络"层的大小,即W公式中的?或者是别的什么?

对于上下文,我正在基于此示例代码工作.

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

它说:

units:正整数,输出空间的维数.

这让我觉得它是Keras LSTM"图层"对象的输出数量.意味着下一层将有N输入.这是否意味着NLSTM层中实际存在这些LSTM单元,或者可能只运行一个 LSTM单元用于N迭代输出N这些h[t]值,例如,从h[t-N]多达h[t]

如果只定义了输出的数量,这是否意味着输入尚可,说,只是一个,还是我们必须手动创建滞后输入变量x[t-N]x[t],一个由定义的每个LSTM单位units=N的说法?

在我写这篇文章的时候,我发现了论证的return_sequences作用.如果设置为True所有N输出都传递到下一层,而如果设置为False它,则只将最后一个h[t]输出传递给下一层.我对吗?

Van*_*Van 26

您可以查看此问题以获取更多信息,尽管它基于Keras-1.x API.

基本上,这unit意味着LSTM中内部单元的尺寸.因为在LSTM中,内部单元的维度(图中的C_t和C_ {t-1}),输出掩码(图中的o_t)和隐藏/输出状态(图中的h_t)应该具有相同的维度,因此您输出的维度也应该是 unit-length.

LSTM在Keras只有准确定义一个LSTM块,其细胞是unit-长度.如果你设置return_sequence=True,它将返回一些形状:(batch_size, timespan, unit).如果false,那么它只返回形状的最后一个输出(batch_size, unit).

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

  • 因此,这意味着“单元”表示每个时间步长 LSTM 单元输出的向量的大小。但是,Keras 如何知道需要使用多少个 LSTM 单元来训练数据?我的意思是,很容易找出否。输入所需的 LSTM 单元的数量(在“时间跨度”中指定),但是,如何找出编号。输出中需要多少 LSTM 单元? (3认同)

Pet*_*ris 9

“LSTM 链”有多少个实例

Keras 循环神经网络的“单位”参数的正确直观解释是,units=1如果您获得教科书中描述的 RNN,并且units=n您获得一个由此n类 RNN的独立副本组成的层- 它们将具有相同的结构,但是由于它们将使用不同的权重进行初始化,因此它们会计算出不同的东西。

或者,您可以认为在 LSTM 中,units=1键值 (f, i, C, h) 是标量;并且units=n它们将是 length 的向量n


pro*_*sti 5

这是否意味着在LSTM层中实际上存在N个LSTM单元,或者是否只运行了一个LSTM单元进行N次迭代,就输出了这些h [t]值中的N个,例如从h [tN]到h [t]?

首先是真的。在Keras LSTM层中,有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) 
Run Code Online (Sandbox Code Playgroud)

如果计划使用1个单元创建简单的LSTM层,则将以以下内容结束: 在此处输入图片说明 这就是您的模型。

N=1
model = Sequential()
model.add(LSTM(N))
Run Code Online (Sandbox Code Playgroud)

对于其他模型,您需要N> 1 在此处输入图片说明

  • 不是根据输入时间步计算出的蓝色单元格。例如,我们有一个 LSTM(32) 层,如果我们输入对应于“(批量大小、时间步长、特征)”的“(2,1,24)”,那么这将只有 1 个蓝色单元格。 (3认同)
  • @dvdblk,是的,N应该是蓝色单元格,或者[LSTM out space](https://keras.io/api/layers/recurrent_layers/lstm/) (2认同)

小智 5

“直观地”就像一个具有 100 个暗淡 (Dense(100)) 的密集层将有 100 个神经元。同样,LSTM(100) 将是由 100 个“智能神经元”组成的层,其中每个神经元都是您提到的图形,输出将是 100 维向量