【问题标题】:How to represent data for LSTMs?如何表示 LSTM 的数据?
【发布时间】:2021-05-27 07:51:12
【问题描述】:

我有序列数据,可以告诉我在不同时间点观察到多个受试者的颜色。例如:

ID Time Color
A 1 Blue
A 2 Red
A 5 Red
B 3 Blue
B 6 Green
C 1 Red
C 3 Orange

我想获得对接下来 3 个时间步的最可能颜色的预测,以及该颜色出现的概率。例如,对于 ID A,我想知道序列中接下来的 3 项(时间、颜色)以及它出现颜色的概率。

我知道 LSTM 通常用于预测这种类型的顺序数据,并且我会输入 3d 数组,例如

input =[ 
[[1,1], [2,2], [5,2]], #blue at t=1, red at t=2, red at t=5 for ID A
[[0,0], [3,1], [6,3]], #nothing for first entry, blue at t=3, green at t=6 for ID B
[[0,0], [1,2], [3,4]]
]
  

将颜色映射到数字后(蓝色-> 1、红色->2、绿色-> 3、橙色-> 4 等)。 我的理解是,默认情况下,LSTM 只是预测每个序列中的下一项,例如

output = [
[[7, 2]], #next item is most likely red at t=7
[[9, 3]], # next item is most likely red at t=9
[[6, 2]] 
]

是否可以修改我的 LSTM 的输出,以便我不仅可以预测下一次出现时间和颜色,还可以获得接下来的 3 次颜色和颜色出现的概率?例如,像

这样的输出
output = [
[[7, 2, 0.93], [8,2, 0.79], [10,4, 0.67]], 
[[9, 2, 0.88], [11,3, 0.70], [14,3, 0.43]], 
...
]

我尝试查看 Keras 的 Sequential 文档,但不确定是否找到任何东西。

此外,我看到有一个 TrainX 和 TrainY 通常用于 model.fit(),但我也不确定我的 TrainY 会在这里吗?

【问题讨论】:

  • Sequential 与序列无关,它只是堆栈层的接口(更好的名称应该是Model)。

标签: python machine-learning keras neural-network lstm


【解决方案1】:

LSTM 只是预测每个序列中的下一项...

并非如此,LSTM 只是帮助对顺序数据进行编码的层。决定模型要“预测”什么的是下游任务(密集层和输出层)。

虽然您可以训练基于 LSTM 的模型来预测序列中的下一个值(通过巧妙地将最后一个时间戳作为回归目标 y),但您最好使用基于 LSTM 的编码器-解码器架构来正确生成来自输入序列的序列。

这与用于生成文本的语言模型或用于将英语翻译成法语的机器翻译模型的架构相同。

你可以找到一个很好的教程来实现这个here。该模型的优势在于,您现在可以根据需要选择解码尽可能多的时间步。因此,对于您的情况,您可以向编码器输入一个填充的、固定长度的颜色序列,并解码 3 个时间步。

从数据准备的角度来看,您必须获取每个颜色序列,删除最后 3 种颜色作为您的 y,并将其余颜色填充为固定长度

sample = [R, G, B, B, R, G, R, R, B]
X = [<start>, 0, 0, 0, 0, 0, R, G, B, B, R, G, <end>]  #Padded input sequence
y = [<start>, R, R, B, <end>]                          #Y sequence

您将在上面的链接中找到必要的预处理、训练和推理步骤。

【讨论】:

  • 我明白了,如果我想在每个序列中获得接下来的 3 种颜色,我会删除每个序列中最后三个观察到的颜色以设置为我的 y。当我们填充时,我们是在开头还是结尾填充有关系吗?我的序列有不同的长度,所以有些人需要比其他人更多的填充。例如我可能在序列 A 中有 8 个项目,在序列 B 中有 6 个项目
  • 预填充比后填充好。原因是隐藏状态会被后填充清除。在预填充 0 之后是实际序列,因此可以更好地保留序列的表示。我已经更新了我的答案以反映相同的情况。阅读this了解更多详情
  • 此外,您还可以填充和截断序列。因此,如果序列小于平均值,则填充它们,但对于非常长的序列,您可能需要截断。
  • @AkshaySehgal 后填充比前填充更受欢迎(甚至您链接的教程也使用过)。虽然这可能比证据更不符合传统,但您链接的论文过于有限,无法声称在模型准确性方面通常比另一篇更好(如果您有任何其他经过同行评审的高质量研究,我会感兴趣)。此外,“冲洗”也可以应用于序列的开始,但实际上这不是问题,因为我们会进行屏蔽。
  • 为了支持我的post-padding更受欢迎的说法:TF,Keras默认使用post,recommend it,CUDNN做postpadding,而Huggingface Transformers只支持postpadding,所以我真的会挑战预填充更受欢迎。 PyTorch doesnt even support 正在预填充。
猜你喜欢
  • 2023-02-25
  • 2020-05-26
  • 1970-01-01
  • 1970-01-01
  • 2021-05-25
  • 1970-01-01
  • 2020-02-25
  • 2020-11-01
  • 1970-01-01
相关资源
最近更新 更多