微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Keras Lstm预测下一项,采用整个序列或滑动窗口滑动窗口是否需要状态LSTM?

如何解决Keras Lstm预测下一项,采用整个序列或滑动窗口滑动窗口是否需要状态LSTM?

我有一个序列预测问题,其中给定序列中的最后n个项目,我需要预测下一个项目。

我有超过200万个序列,每个序列都有不同的timestepslength of sequence),例如有些序列只有5个,有些序列是50/60/100/200,最多500个。

    seq_inputs = [
    ["AA1","BB3","CC4",…,"DD5"],#length/timeteps 5
    ["FF1","DD3","FF6","KK8","AA5","CC8","AA2"]   #length/timeteps 50
   ["AA2","CC11","AA1",……,”DD11”]#length/timesteps 200
    ..
    ..
    ] # there are 2million + of them 

为了预测序列中的下一个项目,我用trim post/pre padding序列最大长度为60,并取所有序列的最后一个元素

例如,X是

[[0,….,'AA1','BB3','CC4'],#lenght 60
 [0,'FF1','DD3','FF6','KK8','AA5','CC8'],'AA2','CC8','CC11','BB3']#lenght 60
 ....
 ]

y是最后一个元素

['DD5','DD11',...]

首先,我将它们标记化,并使用keras tokenizer.text_to_sequence()将它们转换为数字形式,并将其整形为60个时间步长,并且每个序列都有一个特征:**

X = [
    [[0],[0],[1],...,[10],[200],[5],[3],[90] ],[[0],[95],[15],[4],[11],[78],[43]]
    ..
    ..
    ] 
y = [40,3,... ]

我正在使用LSTM进行嵌入,如下所示

model = Sequential()
model.add(Embedding(vocabulary_size,32,input_length=seq_len)) #seq_length
model.add(LSTM(80,return_sequences=True))
..
..
model.fit(train_inputs,train_targets,epochs=50,verbose=1,batch_size=32)

对于我预测序列中下一个项目的问题,这种方法(用后期/预填充将序列修剪到60个最大长度并仅将最后一个项目作为目标)应该很好吗? 在我的示例中,作为目标,每个目标的时间步长分别为5th,50th,200th等。

我应该使每个序列为n-gram /滑动窗口吗?例如,对于我的数据集的第一个序列

   ["AA1","DD5"]

5的滑动窗口,第一个示例将被转换为

seq_inputs = [
   [0,"AA1"]
   [0,"BB3"]
   [0,"CC4"],... 
] 

类似地,其他人也将转换为滑动窗口。

再次总结问题和疑问:

使用当前方法,以最后一个元素为y,我对30的验证准确性感到震惊,但我关心的不是性能,我关心的是我做得是否正确。因此,需要以下指导

  1. 由于我需要预测序列中的下一个项目,因此将每个序列的最后一项作为输出正确吗?
  2. 由于我的输入长度有所不同(从5到500),并且我将其限制为60个时间步长,因此我应该增加还是减少它?
  3. 我应该像分享一样使用滑动窗口方法,而不是整个序列?
  4. 如果要滑动窗口,我是否需要有状态LSTM?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。