LSTM - 使用 deltaTime 作为功能?如何处理不规则的时间戳?

Posted

技术标签:

【中文标题】LSTM - 使用 deltaTime 作为功能?如何处理不规则的时间戳?【英文标题】:LSTM - Use deltaTime as a feature? How to handle irregular timestamps? 【发布时间】:2020-02-14 13:58:11 【问题描述】:

我正在尝试创建一个用于数据序列分类的 LSTM。

我将使用的每个训练输入的数据结构是:

[[
[deltaX,deltaY,deltaTime],
[deltaX,deltaY,deltaTime],...
],class]

其中 deltaX 和 deltaY 反映了在给定时间 deltaTime 内 X 和 Y 的变化。 deltaTime 每次都不一样,它可以从 40 毫秒到 50 毫秒到有时 1000 毫秒不等。末尾的“类”是二分类,可以是 0 也可以是 1。

问题 1(常规 LSTM):如果我要使用基本 LSTM(Keras LSTM),是否应该将 deltaTime 作为特征输入?


我知道 LSTM 有时间戳,但它们固定为一个给定的长度。我仔细研究了 PhasedLSTM,但它们似乎更多地适用于 2 个移动的周期性时间框架。


我遇到的唯一适合的就是 Time-Aware LSTM。

问题 2(时间感知 LSTM):您会推荐他们解决我的问题吗?如果是这样:是否有 keras 实现,因为我之前没有使用过 tensorflow。

【问题讨论】:

【参考方案1】:

如果我理解正确,deltaTime 是数据集中两个连续元素之间经过的时间间隔,不同元素的增量不同。

    一般而言,LSTM 会期望顺序元素之间的持续时间有一定的规律性。 所以回答你的第一个问题:你可能应该,因为它不是实时序列,你也可以尝试其他 NN 类型。 “可能”,因为当您检查测试集的精度时,无论有无此功能,您都会得到真正的答案。

    T-LSTM 是一个模型(实际上是一个修改您的训练集并以不同方式训练常规 LSTM 的代码),它是针对与您的情况完全相同的案例而提出的。它已经两年没有更新了,可能需要进行一些修改才能支持 TF2。 Keras 本身就是高端 API,运行在包括 TensorFlow 在内的多个框架之上。您可以使用它并通过它运行任何 TF 功能,尽管我建议使用 tf.keras

作为旁注,我建议您查看时间延迟神经网络。 TDNN 在 TensorFlow、PyTorch 和可能的许多其他框架中实现。

【讨论】:

感谢您的回答!看来 TDNN 是我正在寻找的东西!虽然我在 TensorFlow 和 PyTorch 中都找不到任何官方实现。你能提供一个链接或什么吗?在 1. 你建议其他类型的 NN - 你只是指 TDNN 吗?您还会建议哪些其他类型? pytorch 有几个流行的实现(不是官方的,但众所周知):github.com/SiddGururani/Pytorch-TDNN 和最近的github.com/jonasvdd/TDNN。至于 TensorFlow,您可以使用步幅为 1 的 1-d CNN。查看 Alan Lockett 的解释:quora.com/…【参考方案2】:

鉴于您的输出只是一个二进制变量,我不确定是否值得在问题上投入那么多技术机器

几个选择:

    将数据转换为一组定期采样的x,y 坐标。只需选择一组“好的”时间并适当地插入位置变化(增量函数将是最简单的,或者你可以做线性,或者更具体到你的问题)。然后,您可以将此工程功能与更多种类的模型一起使用,例如简单的 CNN

    高斯过程回归可以直接处理此类数据,但与 NN 的模型非常不同

【讨论】:

感谢您的回答!虽然这不是我想要的。 1.会操纵数据。这仅在 deltaX,Y 仅取决于 deltaTime 时才有效。高斯过程回归将分离这两个类,尽管它无法学会依赖特征上下文进行分离。

以上是关于LSTM - 使用 deltaTime 作为功能?如何处理不规则的时间戳?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Keras 功能 API 将时间序列与 RNN/LSTM 中的时间不变数据相结合

LSTM模型预测cos函数

Keras 使用真实值作为训练目标的 LSTM 分类器的官方示例?

tensorflow 如何确定将选择哪些 LSTM 单元作为输出?

在 Keras 中使用 LSTM 预测股票(Python 3.7、Tensorflow 2.1.0)

C++ Win32 FPS 和 DeltaTime 实现