【问题标题】:LSTM with multiple input sequences and corresponding multiple output sequences具有多个输入序列和对应的多个输出序列的 LSTM
【发布时间】:2019-02-21 15:57:49
【问题描述】:

我有一个与重塑 LSTM 的输入/输出数据有关的问题。虽然有很多帖子考虑这些问题,但我无法找到合适的解决方案。如果错误非常明显,我深表歉意——我对深度学习领域相当陌生。

我的问题如下:我执行了一个模拟,结果产生了几个与时间相关的数据序列,我想将这些数据输入 LSTM 网络。数据(非常简化)如下所示:

X=[[[8, 0, 18, 10]
    [9, 0, 20, 7]
    [7, 0, 17, 12]]
   [[7, 0, 31, 8]
    [5, 0, 22, 9]
    [7, 0, 17, 12]]]

也就是说,我有两个序列,每个序列有三个时间步长,每个时间步长有 4 个特征。因此,X 的形状是 (2,3,4)。相应地,我想预测的如下所示

y=[[[10]
    [7]
   [12]]
   [[8]
    [9]
   [12]]]

并且具有形状 (2,3,1)。也就是说,数据点 [8,0,18,10] 应该预测 [10],然后是应该预测 7 的点 [9,0,20,7],依此类推。然后我的模型如下所示:

model.add(LSTM(input_shape=(X.shape[1], X.shape[2]), return_sequences=True))
model.add(Dense(50, activation='tanh'))
model.add(Dense(1, activation='tanh'))

虽然这似乎可以正常工作,但我的结果很糟糕。最有可能的是,我认为这与正确重塑输出向量有关。另外,我不太确定 return_sequences 是否必须为真。如果它设置为 False,我会收到错误消息“预期 dense_2 有 2 个维度,但得到了一个形状为 (2,3,1) 的数组。不太确定这一点。 我也在研究 Seq2Seq 建模,因为我试图根据序列预测序列,但我找不到解决方法。 有人可以帮忙吗?

【问题讨论】:

  • 返回序列是正确的,但我相信在此之后使用 Dense 层需要使用 TimeDistributed 层 (machinelearningmastery.com/…)
  • 谢谢!我一直在尝试解决这个问题 - 使用 TimeDistributed 可以大大改善结果。
  • 这没有多大意义。在较新的 keras 版本中,Dense = TimeDistributed(Dense),在较旧的 keras 版本中,您应该只会得到一个错误。
  • 我使用的是 keras 版本 2.1.6。可能这仍然算作旧版本,因为我没有收到任何错误
  • @DanielMöller 你能解释一下为什么这会产生错误吗?

标签: python tensorflow keras lstm


【解决方案1】:

您可能正试图从 'tanh' 获取大数字,它只输出 -1 和 1 之间。

例如,tanh 无法达到 10。

要么将最终激活替换为 'linear'(输出任何内容),要么将输出数据标准化为 -1 和 1 之间。

如果您的数据始终为正数,您可以尝试使用'softplus' 而不是'linear',如果您选择规范化数据,请将其设置在 0 和 1 之间并使用 'sigmoid'

【讨论】:

  • 很抱歉给您带来了困惑。我的模型的实际数据确实在-1和1之间进行了归一化。我只是用上面的原始数据来说明我的问题。
猜你喜欢
  • 1970-01-01
  • 2021-12-17
  • 2020-08-20
  • 2017-06-16
  • 2019-12-22
  • 1970-01-01
  • 2019-04-14
  • 2021-10-02
  • 1970-01-01
相关资源
最近更新 更多