【问题标题】:Many to one implementation in keraskeras 中的多对一实现
【发布时间】:2017-09-03 04:50:56
【问题描述】:

我正在尝试实现多对一模型,其中输入是大小为 d 的词向量。我需要在 LSTM 的末尾输出一个大小为 d 的向量。

在这个question 中,提到使用(用于多对一模型)

model = Sequential()
model.add(LSTM(1, input_shape=(timesteps, data_dim)))

我仍然对如何在 keras 模型中指定输入,更重要的是输出维度持怀疑态度

【问题讨论】:

    标签: keras lstm recurrent-neural-network


    【解决方案1】:

    您提供的代码实际上是针对one-to-many 场景的 - 但对于大小为 1 的输出。如果您想要输出大小为 d 您需要尝试以下代码:

    model = Sequential()
    model.add(LSTM(d, input_shape=(len_seq, d)))
    

    此外 - 对于词向量,我强烈建议您使用专为您的用例设计的 Embedding 层。然后将其用作LSTM 的输入。

    【讨论】:

    • 我认为我给出的代码对于多对一的情况是有效的,其中在每个时间步输入是一个整数,LSTM 输出一个且只有一个输出,它位于末尾。所以不应该是多对一的代码吗?
    • @MysticForce 你想出解决方案了吗?为同样的问题苦苦挣扎。
    【解决方案2】:

    输入是形状的 3D 张量(batch_size、timesteps、input_dims)

    所以它看起来像这样:

    batch_input = np.empty([batch_size] + [timesteps] + [d])
    

    将有一个输出(最后一个序列),因为默认情况下 keras 中的 'return_state=False'。

    输出形状将是:

    (batch_size, 1)
    

    因为你的 LSTM 中只有一个单元。如果你想要一个具有 'd' 尺寸的输出,那么你必须将 LSTM 更改为

    LSTM(d, input_shape=(timesteps, data_dim))
    

    【讨论】:

      猜你喜欢
      • 2017-07-15
      • 2017-03-12
      • 1970-01-01
      • 2019-06-29
      • 1970-01-01
      • 2017-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多