如何清楚地解释Keras中单位参数的含义?

Mys*_*Guy 7 python lstm keras

我想知道LSTM如何在Keras工作.例如,在本教程中,与许多其他教程一样,您可以找到如下内容:

model.add(LSTM(4, input_shape=(1, look_back)))
Run Code Online (Sandbox Code Playgroud)

"4"是什么意思.它是图层中神经元的数量.通过神经元,我的意思是每个实例给出一个输出?

实际上,我发现了这个明智的讨论, 但并没有真正相信参考文献中提到的解释.

在该方案中,人们可以看到num_units说明,我认为我没有错的话,每个这个单位是一个非常原子LSTM单元(即4门).但是,这些单位是如何连接的?如果我是对的(但不确定),x_(t-1)是大小nb_features,所以每个功能都是一个单位的输入,num_unit必须等于nb_features正确?

现在,我们来谈谈keras.我已阅读此帖和接受的答案并遇到麻烦.的确,答案是:

基本上,形状就像(batch_size,timespan,input_dim),其中input_dim可以有不同的unit

在这种情况下 ?我在之前的参考文献中遇到了麻烦......

而且,它说,

Keras中的LSTM仅定义一个LSTM块,其单元长度为单位长度.

好的,但是如何定义完整的LSTM图层呢?是否input_shape隐含地创建了与数量一样多的块time_steps(根据我是input_shape我的代码中参数的第一个参数?

谢谢你照亮我

编辑:是否也可以清楚地详细说明如何重塑(n_samples, n_features)有状态LSTM模型的数据?如何处理time_steps和batch_size?

Jos*_*Jos 6

首先,units在 LSTM 中,不是time_steps 的数量。

\n\n

每个 LSTM 单元(出现在给定的 time_step 处)接受输入x并形成一个隐藏状态向量,这个隐藏单元向量的长度就是LSTM(Keras)中a所谓的长度。units

\n\n

您应该记住,代码只创建了一个 RNN 单元

\n\n
keras.layers.LSTM(units, activation=\'tanh\', \xe2\x80\xa6\xe2\x80\xa6 )\n
Run Code Online (Sandbox Code Playgroud)\n\n

RNN 操作由类本身重复 Tx 次。

\n\n

我将链接起来,以帮助您通过非常简单的代码更好地理解它。

\n


Dan*_*ler 5

您可以(某种程度上)将其视为完全连接的层。单位是神经元。

与大多数众所周知的层类型一样,输出的维度是神经元的数量。

不同之处在于,在 LSTM 中,这些神经元不会完全相互独立,它们会由于隐藏在底层的数学运算而相互通信。

在进一步讨论之前,看一下关于 LSTM、其输入/输出以及 stative = true/false 的用法的非常完整的解释可能会很有趣:了解 Keras LSTM。请注意,您的输入形状应该是input_shape=(look_back, 1)。输入形状为(time_steps, features)

虽然这是一系列完全连接的层:

  • 隐藏层1:4个单元
  • 隐藏层 2:4 个单元
  • 输出层:1个单元 全连接层

这是一系列 LSTM 层:

在哪里input_shape = (batch_size, arbitrary_steps, 3)

在此输入图像描述

每个 LSTM 层将不断重复使用相同的单元/神经元,直到处理完输入中的所有任意时间步。

  • 输出的形状为:
    • (batch, arbitrary_steps, units)如果return_sequences=True
    • (batch, units)如果return_sequences=False
  • 内存状态的大小为units
  • 最后一步处理的输入的大小为units

准确地说,将有两组单元,一组处理原始输入,另一组处理来自最后一步的已处理输入。由于内部结构的原因,每组都会有一些比单元数大4倍的参数(这个4与图像无关,是固定的)。

流动:

  • 接受包含 n 个步骤和 3 个特征的输入
  • 第 1 层:
    • 对于输入中的每个时间步长:
      • 在输入上使用 4 个单位以获得大小 4 的结果
      • 对上一步的输出使用 4 个循环单元
    • 输出最后 ( return_sequences=False) 或所有 ( return_sequences = True) 步骤
      • 输出特征 = 4
  • 第 2 层:
    • 与第 1 层相同
  • 第 3 层:
    • 对于输入中的每个时间步长:
      • 在输入上使用 1 个单位以获得大小为 1 的结果
      • 对上一步的输出使用 1 个单位
    • 输出最后 ( return_sequences=False) 或所有 ( return_sequences = True) 步骤