gpt4 book ai didi

python - TensorFlow 中 LSTM 的权重和偏差维度

转载 作者:行者123 更新时间:2023-12-05 04:27:19 26 4
gpt4 key购买 nike

我对 LSTM 的隐藏权重数组的维度感到困惑。我理解输入权重和偏差维度就好了。现在我最近才开始学习 RNN 和 LSTM,所以我可能不完全了解它们的操作。这是我的理解。 LSTM 层有许多单元格,这些单元格保存与门相对应的权重和偏差。一个数据序列被输入到第一个单元格,一个时间步一个时间步。在此过程中,隐藏状态在序列的每个步骤中创建,并传递回单元格。在序列的末尾,计算一个单元格状态,该状态被传递到下一个单元格,并在具有相同输入数据的下一个单元格上重复该过程。我希望我有这个权利。现在举个例子来解释我的困惑。

inputs = Input(shape=(100,4))
x = LSTM(2)(x)
outputs = Dense(1)(x)

model = Model(inputs=inputs, outputs=outputs)

此 LSTM 将具有以下摘要:


Model: "model"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_1 (InputLayer) [(None, 100, 4)] 0

lstm (LSTM) (None, 2) 56

dense (Dense) (None, 1) 3

=================================================================
Total params: 59
Trainable params: 59
Non-trainable params: 0
_________________________________________________________________

据我了解,每个 LSTM 单元有 8 个权重和 4 个偏差。其中 4 个权重应用于输入,另外 4 个应用于单元格的隐藏状态。这些权重和偏差在整个输入序列中是恒定的。从偏见开始。每个单元格有 4 个偏差,因此 LSTM 层中的偏差总数等于 (number_of_cells*4)。在这种情况下 (2*4)=8。

print(model.layers[1].get_weights()[2].shape)

(8,)

结账。

现在是输入权重。每个单元格都有 4 个输入权重,它们本身包含与输入特征相同数量的权重。这需要乘以细胞数量。所以输入权重的总数是 (number_of_features*4*number_of_cells)。在这种情况下 (4*4*2)=32。

print(model.layers[1].get_weights()[0].shape)

(4, 8)

这也检查出来。

现在是令人困惑的部分。每个单元还有 4 个隐藏权重。并且隐藏状态的数量等于序列长度。但是序列长度应该无关紧要,因为权重在整个过程中保持不变。我发现隐藏权重的总数是 (number_of_cells*4*number_of_cells)。在这种情况下 (2*4*2)=16。

print(model.layers[1].get_weights()[1].shape)

(2, 8)

考虑到有 2 个单元格,这意味着每个单元格必须有 8 个隐藏权重。但这与我所知道的相冲突。每个单元格只有 4 个隐藏权重。是什么解释了每个单元格额外的 4 个隐藏权重?据我了解,单元格的最后隐藏状态对网络单元格没有影响。但是,有一个单元格状态确实会传递到序列末尾的下一个单元格。但我在网上找不到任何提到细胞状态权重的地方。

我希望我说清楚我的困惑在哪里。谢谢。

最佳答案

这里是来自 LSTM 维基百科的相关方程式

请注意,正如您所说,有 4 组输入 (W)、隐藏 (U) 权重和偏差 (b)。请注意,由于 Hadamard 积,i、f o、c、h 和所有偏差应具有相同的维度。

输入向量的维度是 (4,),隐藏向量 - (2,)。

每个输入权重矩阵为(4, 2),一共有4个,所以总共有4x2x4 = 32个输入权重。

有了隐藏权重,它们是(2, 2),共有4个,所以2x2x4 = 16个隐藏权重。

每个偏置都是 (2,) 向量,所以 2x4 = 8 个偏置在一起。

细胞状态由隐藏状态和输入门控。它充当长内存(L),而隐藏状态是短内存(S)。注意第 4 个等式,它是一个简单的线性更新 C[t] = F[t] x C[t-1] + K[t],隐藏状态不是这种情况。

我建议您在 subject of LSTM 上查看 Colah 的博客.这可能是我偶然发现的有关该主题的最佳资源。

关于python - TensorFlow 中 LSTM 的权重和偏差维度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72850621/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com