LSTM 层的权重和偏差 Python

Weights and Biases of LSTM Layer Python

我开发了一个具有 1 个 LSTM 层和 3 个密集层的 LSTM 模型,如下所示

model = Sequential()

model.add(LSTM(units = 120, activation ='relu', return_sequences = False,input_shape 
(train_in.shape[1],5)))
    
model.add(Dense(100,activation='relu'))
model.add(Dense(50,activation='relu'))
model.add(Dense(1))

我已经训练好了模型,得到了模型训练好的权重和偏差。详情如下。

w = model.get_weights()
w[0].shape, w[1].shape,w[2].shape,w[3].shape,w[4].shape,w[5].shape,w[6].shape,w[7].shape,w[8].shape

我得到的输出是,

 ((5, 480),(120, 480),(480,),(120, 100),(100,),(100, 50),(50,),(50, 1),(1,))

给出了2个维度为(5,480)&(120,480)的权重矩阵和一个dim(480,)的偏置矩阵对应LSTM层。其他的跟密集层有关。

我想知道的是,LSTM 有 4 层。那么我怎样才能分别得到这 4 层的权重和偏差呢?我可以将总权重(5,480)分成4等份并认为第1个120对应LSTM的第1层,第2个120属于LSTM的第2层等等吗?

请分享您对此的宝贵意见。也请任何好的参考

由于其内部门单元结构,LSTM 没有 4 ,但有 4 个权重矩阵。如果这令人困惑,阅读一些关于 LSTM 工作原理的资源会很有帮助。总而言之,内部由 3 个门和 1 个单元状态组成,用于计算最终隐藏状态。

如果您检查 underlying implementation,您可以看到它们的连接顺序:

[i, f, c, o]

# i is input gate weights (W_i).
# f is forget gate weights (W_f).
# o is output gate weights (W_o).
# c is cell gate weights (W_c).

因此,在偏置张量 (480,) 的示例中,您可以将其分成 4 个大小为 120 的子张量,其中 w[:120] 表示输入门权重,w[120:240] 表示遗忘门权重等等。