【问题标题】:Weights and Biases of LSTM Layer PythonLSTM 层 Python 的权重和偏差
【发布时间】:2021-02-15 02:24:23
【问题描述】:

我开发了一个具有 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) 的权重矩阵和一个对应于 LSTM 层的 dim (480,) 的偏置矩阵。其他的与密集层有关。

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

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

【问题讨论】:

    标签: python lstm hyperparameters


    【解决方案1】:

    由于其内部的门单元结构,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] 代表遗忘门权重,依此类推。

    【讨论】:

    • 您好@runSOSrun,感谢您的回复。我已经完成了底层实现。我对这个过程有了更好的理解。但是我在这里有两个主要疑问,我无法弄清楚。我的输入有 5 个变量,每个变量有 20 个时间步长,我的输入大小为 (5*20),但输入门的权重大小为 (5*120)。大小不匹配,因此不能相乘。另外我的初始隐藏状态“h”的大小和值应该是多少?请让我知道如何继续前进。
    • return_sequences = False 返回最终时间步长作为隐藏状态,True 保持时间维度不变。因此,展开时尺寸确实在内部匹配。你的最后一个问题真的不可能用两句话来全面回答,所以你可能想阅读更多的资料。作为初学者,不用担心初始化。在您的情况下,h 的大小为 120。如果您的意思是“理想尺寸是多少?”:这始终取决于模型和数据。您总是运行网格搜索,通过训练多个网络(称为超参数优化)通过实验找出最佳值。
    • 非常感谢您抽出宝贵时间帮助我:)
    猜你喜欢
    • 2019-11-18
    • 2018-03-05
    • 2021-11-07
    • 1970-01-01
    • 2022-09-24
    • 2019-08-04
    • 2017-12-01
    • 2017-02-26
    • 2019-12-29
    相关资源
    最近更新 更多