如何使用Keras LSTM进行Y标记的结构和大小以用于多变量序列预测

时间:2019-01-17 17:18:57

标签: python keras deep-learning lstm recurrent-neural-network

我正在处理一个序列预测问题,其中我的输入具有大小(numOfSamples,numOfTimeSteps,要素),其中每个样本都是独立的,每个样本的时间步长是统一的(使用keras将长度预填充为0后) .pad_sequences),而我的功能数量为2。总结我的问题,我想知道如何构造我的Y标签数据集以馈入模型,并想了解如何正确构造模型以输出我想要的是。

我的第一个特征是编码为唯一整数的分类变量,第二个特征是数字。我希望能够预测下一个分类变量以及关联的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做任何事情的第一次尝试,但我不会说我对python很好,尽管可以。但是,我觉得我对基本的理论概念掌握得很好,但是却缺乏实践。

这个问题有点悬而未决,并鼓励人们分清我目前的策略。

再一次,总体目标是预测两个特征(分类,数字),以便根据中间长度序列预测“完整序列”。
例如我在这些填充的max-len序列上进行训练,但是在生产中,我想用它来预测当前看不见的时间步长的剩余部分,该时间步长是可变的。

2 个答案:

答案 0 :(得分:0)

好的,如果我能正确理解您(如果我错了,请纠正我),您希望根据当前功能预测下一个功能。

当涉及到分类变量时,就可以了,Dense层应该输出N-1个向量,其中包含每个类的概率(在我们这样做的时候,如果有可能,请使用{{ 3}},请记住要指定参数drop_first=True,无论您使用哪种方法进行一键编码,都应使用类似的方法。

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

记住要输出登录信息(不激活,请勿像现在一样在最后使用softmax)。之后,网络输出应分为N-1部分(您的分类特征),并传递给能够处理logit的损失函数(例如,在Tensorflow中,pandas.get_dummies会为您应用数值稳定的softmax)。

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

基于这两个损失的损失值(您可以对两个损失进行均值以获得一个损失值),通过网络反向传播,这样可能就可以了。

很遗憾,我对Keras的掌握不够熟练,无法帮助您编写代码,但我想您会自己解决的。尽管我们选择了它,但我还是建议 PyTorch 使用更多自定义神经网络(我认为您的神经网络符合此描述),尽管您也可以选择在Keras中使用它。

其他“可能有帮助”的想法:您可以检查教师强迫以完成您的任务。可以在出色的tf.nn.softmax_cross_entropy_with_logits_v2和代码示例(尽管再次在PyTorch中)中找到有关该主题和理论的更多信息,也可以在其文档Deep Learning Book中找到它。

顺便说一句有趣的主意,请注意,如果我将其与我当前的研究轨迹结合使用(当然会受到赞誉)?如果可以,请对此答案发表评论。

答案 1 :(得分:0)

基本上,我正在寻找的每个答案都在本教程中进行了举例说明。试图理解如何为多输出网络建模的绝对宝贵资源。这是一个漫长的多输出CNN架构演练。但是,我只花了大约三个星期就发现了。

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