gpt4 book ai didi

python - 双向 LSTM 合并模式说明

转载 作者:行者123 更新时间:2023-12-03 20:25:11 29 4
gpt4 key购买 nike

我想了解有关使用双向 LSTM 进行序列分类时合并模式的更多详细信息,尤其是对于我还不清楚的“Concat”合并模式。
根据我对这个方案的理解:
enter image description here
在将前向和后向层的合并结果传递到 sigmoid 函数后计算输出 y_t。 “add”、“mul”和“average”合并模式似乎相当直观,但我不明白选择“concat”合并模式时输出 y_t 是如何计算的。实际上,使用这种合并模式,我们现在在 sidmoid 函数之前有一个向量而不是单个值。

最佳答案

  • 在 Bi-LSTM 中,你将有一个 LSTM 从左到右展开(比如 LSTM1)
    输入(比如 X)和另一个 LSTM 从右到左展开形式(比如 LSTM2)。
  • 假设您的输入大小(X.shape)是 n X t X f在哪里
  • n :批量大小
  • t序列长度/时间步长/没有:展开)
  • f :No:每时间步的特征

  • 假设我们有一个带有单个 Bi-LSTM 的模型定义如下
  • model.add(Bidirectional(LSTM(10, return_sequences=True), input_shape=(t, f)))
  • 在这种情况下,LSTM1 将返回大小为 n X t X 10 的输出LSTM2 将返回大小为 n X t X 10 的输出
  • 现在您可以选择如何使用 merge_mode 在每个时间步组合 LSMT1 和 LSTM2 的输出。

  • 总和:在每个时间步将 LSTM1 输出添加到 LSTM2。 IE。 n X t X 10 LSTM1 + n X t X 10 LSTM2 = 输出大小 n X t X 10 多: LSTM1 输出到 LSTM2 在每个时间步的元素乘法,这将导致输出大小 n X t X 10 连接:在每个时间步将 LSTM1 输出按元素连接到 LSTM2,这将导致输出大小为 n X t X 10*2 大街: LSTM1 输出到 LSTM2 在每个时间步长的元素平均值,这将导致输出大小 n X t X 10 无:将 LSTM1 和 LSTM2 输出作为列表返回
    基于 merge_mode 组合输出后不应用激活函数.如果要应用激活,则必须在模型中将其明确定义为层。
    测试代码
    model = Sequential()
    model.add(Bidirectional(LSTM(10, return_sequences=True), input_shape=(5, 15), merge_mode='concat'))
    assert model.layers[-1].output_shape == (None, 5, 20)

    model = Sequential()
    model.add(Bidirectional(LSTM(10, return_sequences=True), input_shape=(5, 15), merge_mode='sum'))
    assert model.layers[-1].output_shape == (None, 5, 10)

    model = Sequential()
    model.add(Bidirectional(LSTM(10, return_sequences=True), input_shape=(5, 15), merge_mode='mul'))
    assert model.layers[-1].output_shape == (None, 5, 10)
    笔记:
    您不能使用 merge_mode=None在序列模型中,因为每一层都应该返回一个张量,但是 None返回一个列表,因此您无法将其堆叠在模型中。但是,您可以在 keras 的功能 API 中使用它。

    关于python - 双向 LSTM 合并模式说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62991082/

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