ChatGPT解决这个技术问题 Extra ChatGPT

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

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

https://i.stack.imgur.com/aTDpS.png

(这是“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 单元,或者可能恰好 一个 LSTM 单元运行 N 次迭代,输出这些 h[t] 值中的 N 个,从 h[t-N]h[t]

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

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

@Peteris我不认为在堆栈交换站点上将问题标记为“重复”是一回事。这个问题也与 Keras 有关,Keras 是 Tensorflow 之上的一个抽象层。无论如何,该链接很有帮助,也是一个很好的参考,所以谢谢。
检查这个 - zhuanlan.zhihu.com/p/58854907。一个很好的解释。

V
Van

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

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

而 Keras 中的 LSTM 只定义了一个 LSTM 块,其单元的长度为 unit。如果您设置 return_sequence=True,它将返回形状为 (batch_size, timespan, unit) 的东西。如果是 false,那么它只返回形状 (batch_size, unit) 中的最后一个输出。

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


因此,这意味着 unit 表示每个时间步长 LSTM 单元输出的向量的大小。但是,Keras 怎么知道这些 LSTM 单元中有多少要使用 OR 来训练数据呢?我的意思是,很容易找出不。输入所需的 LSTM 单元数(在 timespan 中指定),但是,如何找出编号。输出中需要多少个 LSTM 单元?
p
prosti

这是否意味着在 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) 

https://i.stack.imgur.com/xLZCK.png

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

https://i.stack.imgur.com/PQs02.png


为什么我们要在 one-to-one 模型中使用 lstm?
如果神经网络是矩阵变换后跟非线性的,那么 LSMT 中有几个神经网络。我不清楚为什么我在实践中只使用单个 LSMT 单元。
那么 N 是蓝色单元格的数量吗?
@dvdblk,是的,N 应该是蓝色单元格,或者 LSTM out space
不是从输入时间步计算的蓝色单元格。例如,我们有一个 LSTM(32) 层,如果我们输入对应于 (batch size, time step, features)(2,1,24),那么这将只有 1 个蓝色单元格。
P
Peteris

“LSTM 链”有多少个实例

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

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


R
Rishang

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