【问题标题】:LSTMs with multi-dimensional output targets具有多维输出目标的 LSTM
【发布时间】:2018-12-03 13:03:49
【问题描述】:

给定 3D 向量的时间序列[x, y, z],其中 x、y 和 z 是任意整数,我想构建一个模型来预测序列中的下一个向量并捕获每个维度 x 中的模式,y,z。

所以如果 X = [[0, 0, 6], [1, 0, 0], [9, 9, 9], [3, 0, 3], [1, 2, 3]] 和我给我的模型一个 4 元素序列 [[0, 0, 6], [1, 0, 0], [9, 9, 9], [3, 0, 3]] 它会预测 [1, 2, 3]

我不能只对每个向量进行一次热编码,因为数字可以具有任意值,所以我想知道如何实现这一点。非常感谢任何见解,谢谢!

【问题讨论】:

  • 您是否尝试过实现一个由一个或多个 LSTM 层和一个密集层组成的模型?只需运行model.predict(test_data) 然后round 结果,看看它是否接近真实值。我不确定它是否准确,我只是想问您是否在数据上尝试过这种方法。
  • 我有,但我无法解释我得到的预测向量,所以我想我可能遗漏了一些基本的东西。这是我在该过程结束时发布的一个问题(包括我的模型)stackoverflow.com/questions/51014044/…
  • 在您的解决方案中,删除TimeDistributed 并添加一个大小为 3 的密集层,您对最后一层使用什么激活函数?实际上不应该有任何激活函数,因为你正在做(向量)回归。
  • 我使用softmax。除非您指的是不同的层,否则它在底部的模型中?而且我认为回归在这里不起作用,因为我的向量中的 z 值对应于一个单热编码的字母,所以不会有回归可以找到的模式,我不认为。我错了吗?
  • 我错过了什么吗?您是否对预测向量[x,y,z] 不感兴趣,其中xyz 是任意整数(并且没有界限,因此它们不能被编码或离散化)?

标签: python tensorflow machine-learning keras lstm


【解决方案1】:

在这种情况下,您的输入只是向量。在时间步 1,向量是 [0,0,6],在时间步 2,向量是 [1,0,0],依此类推。对于输出,您应该将输出通过一个完全连接的层,该层将其转换为正确的输出大小。

假设您的序列长度是固定的,您实际上不需要在此处进行任何预处理,除了可能标准化或重新调整您的输入以使其不是非常大的数字。

一般来说,RNN 的工作原理很像全连接网络。事实上,一个 RNN 单元由 4 个完全连接的网络组成,这些网络以一种非平凡的方式简单地通过管道连接在一起。但是从你投入和产出的角度来看,把它们想象成一个简单的全连接网络(每个时间步长)。

你可以在这里阅读我最后一段的更多信息:http://colah.github.io/posts/2015-08-Understanding-LSTMs/

如果您的序列长度是可变的,那么您通常会添加一个输入,将其标记为预测步骤。这可能只是全为零,例如:

X = [[0, 0, 6], [1, 0, 0], [9, 9, 9], [3, 0, 3], [0, 0, 0]]

或者,如果 [0,0,0] 是一个有效的数据点,您可以添加一个特征来将时间步标记为输入或预测,例如:

X = [[0, 0, 0, 6], [0, 1, 0, 0], [0, 9, 9, 9], [0, 3, 0, 3], [1, 0, 0, 0]]

该数据集中的第一个值指示时间步是输入0 还是预测1

您将在每个时间步都有输出,您将忽略这些输出。您的损失函数将仅基于最后一个时间步的输出。

【讨论】:

  • 谢谢你的解释,大卫。我已经将一个 LSTM 模型放在一起,但在解释输出时遇到了麻烦,所以我认为我在理解中遗漏了其他东西。这是我提出的另一个问题,其中包括我的模型和我对输出的困惑(在更新中):stackoverflow.com/questions/51014044/…
猜你喜欢
  • 2018-01-10
  • 2021-12-17
  • 1970-01-01
  • 2017-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-30
  • 1970-01-01
相关资源
最近更新 更多