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

时间:2017-05-30 23:05:49

标签: tensorflow neural-network keras lstm

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

enter image description here

(这是“Understanding LSTM Networks”的重写版本)

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

对于上下文,我的工作基于this example code

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

它说:

  

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

这让我觉得它是Keras LSTM“图层”对象的输出数量。意味着下一层将有N个输入。这是否意味着LSTM层中实际存在N个这些LSTM单元,或者可能是{em>一个 LSTM单元运行N迭代输出N这些h[t]值,例如h[t-N]h[t]

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

当我写这篇文章时,我发现了units=N论证的内容。如果设置为return_sequences,则所有True输出都会传递到下一个图层,而如果设置为N,则只会将最后False个输出传递到下一个图层。我是对的吗?

4 个答案:

答案 0 :(得分:21)

您可以查看this question以获取更多信息,但它基于Keras-1.x API。

基本上,unit表示LSTM中内部单元的维度。因为在LSTM中,内部单元的维度(图中的C_t和C_ {t-1}),输出掩码(图中的o_t)和隐藏/输出状态(图中的h_t)应该具有 SAME < / strong>维度,因此输出的维度应该是unit - 长度。

Keras中的LSTM只定义了一个LSTM块,其单元格为unit - 长度。如果您设置return_sequence=True,它将返回形状为(batch_size, timespan, unit)的内容。如果false,则它只返回形状(batch_size, unit)中的最后一个输出。

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

答案 1 :(得分:2)

  

这是否意味着在LSTM层中实际上存在N个LSTM单元,或者是说正好运行一个LSTM单元进行N次迭代,从例如h [tN]输出这些h [t]个值中的N个高达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) 

如果计划使用1个单元创建简单的LSTM层,则将以以下内容结束: enter image description here 这就是您的模型。

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

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

答案 2 :(得分:0)

“ LSTM链”的实例数

对于Keras递归神经网络'units'参数的正确直观的解释是,使用units=1您将获得教科书中所述的RNN,而使用units=n您将获得一个包含{ {1}}此类RNN的独立副本-它们具有相同的结构,但是由于它们将使用不同的权重进行初始化,因此它们将计算出不同的值。

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

答案 3 :(得分:0)

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