具有多维输出目标的LSTM

时间:2018-06-25 01:28:54

标签: python tensorflow machine-learning keras lstm

给出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]

由于数字可以具有任意值,因此我不能对每个向量进行一次热编码,所以我想知道如何实现此目的。任何见解都将不胜感激,谢谢!

1 个答案:

答案 0 :(得分: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

您将在每个时间步都有输出,您将忽略它们。您的损失函数将仅基于上一个时间步的输出。