如何使用 Keras LSTM 为多变量序列预测构建和调整 Y 标签的大小

How to structure and size Y-labels for multivariate sequence prediction using Keras LSTMs

我正在研究一个序列预测问题,其中我的输入大小为(numOfSamples、numOfTimeSteps、特征),其中每个样本都是独立的,每个样本的时间步数是统一的(在用 0 预填充长度后)使用 keras.pad_sequences),我的特征数量是 2。为了总结我的问题,我想知道如何构建我的 Y 标签数据集来为模型提供数据,并希望获得一些关于如何正确构建的见解我的模型输出我想要的。

我的第一个特征是一个编码为唯一 int 的分类变量,第二个特征是数字。我希望能够预测下一个分类变量以及关联的 feature2 值,然后使用它反馈到网络中以预测一个序列,直到输出 EOS 类别。

这是我一直在参考的主要来源,试图了解如何创建用于 keras.fit_generator 的生成器。 [1]

对于 "X" 数据的小批量是如何被抓取的没有混淆,但是对于 "Y" 数据,我不确定我想要做的事情的正确格式.因为我试图预测一个类别,所以我认为 t+1 时间步长的单热向量表示是编码第一个特征的正确方法,我猜结果是 4?维度 numpy 矩阵??但是我有点迷失了如何处理第二个数字特征。

现在,这让我想到了有关体系结构以及如何构建模型来执行我想要的操作的问题。下面的架构有意义吗?我相信缺少一些我不理解的东西。

提议的架构(松散填写参数,尚未设置):

model = Sequential()
model.add(Masking(mask_value=0., input_shape=(timesteps, features)))
model.add(LSTM(hidden_size, return_sequences=True))
model.add(TimeDistributed(Dense(vocab_size)))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['categorical_accuracy'])
model.fit_generator(...) #ill figure this out

所以,最后,softmax 激活可以预测 feature1 的下一个分类值。我还如何输出 feature2 的值,以便我可以在下一个时间步反馈两个特征的新预测?我是否需要某种具有两个以某种方式组合的 LSTM 的并行架构?

这是我第一次尝试使用神经网络或 Keras 做任何事情,我不会说我 "great" 在 python,但我可以通过。但是,我觉得我对基本的理论概念掌握得还不错,但缺乏实践。

这个问题有点开放式,鼓励我拆开我目前的策略。

再一次,总体目标是预测两个特征(分类、数字),以便从中间长度序列预测 "full sequences"。
前任。我训练这些填充的 max-len 序列,但在生产中我想用它来预测当前看不见的时间步长的剩余部分,这将是可变长度。

好的,所以如果我理解正确(如果我错了请纠正我)你想根据当前的特征预测下一个特征。

当涉及到分类变量时,你说的很对,你的 Dense 层应该输出 N-1 个向量,其中包含每个 class 的概率(当我们这样做时,如果你,通过任何机会,使用 pandas.get_dummies 记住指定参数 drop_first=True,无论您使用什么进行单热编码,都应采用类似的方法。

除了每个样本的N-1个输出向量外,它应该多输出一个数字作为数值。

记得输出logits(没有激活,不要像你现在那样在最后使用softmax)。之后,网络输出应分为 N-1 部分(您的分类特征)并传递给能够处理 logits 的损失函数(例如,在 Tensorflow 中,它是 tf.nn.softmax_cross_entropy_with_logits_v2,它为您应用数值稳定的 softmax)。

现在,您的网络输出的第 N 个元素应该传递给不同的损失,可能是 均方误差

基于这两个损失的损失值(你可以取两者的平均值来获得一个损失值),你通过网络反向传播,它可能做得很好。

不幸的是,我对 Keras 不够熟练,无法帮助您编写代码,但我想您会自己解决的。当我们这样做的时候,我想建议 PyTorch 用于更多自定义神经网络(我认为你的符合这个描述),尽管它在 Keras 中也绝对可行,你的选择。

其他'maybe helpful'想法:您可以检查教师强迫以了解您的任务类型。有关主题及其背后理论的更多信息,请参阅杰出的 Deep Learning Book and code example (though in PyTorch once again), can be found in their docs here

顺便说一句有趣的想法,介意我将它与我当前的研究轨迹结合使用吗(当然,你会得到荣誉)?如果可以,请评论此答案,我们可以在聊天中讨论。

基本上,我正在寻找的每个答案都在本教程中进行了示例和解释。绝对是尝试了解如何对多输出网络建模的绝佳资源。这一个经历了一个多输出 CNN 架构的冗长演练。然而,我只花了大约三个星期就偶然发现了。

https://www.pyimagesearch.com/2018/06/04/keras-multiple-outputs-and-multiple-losses/