3darray训练/测试TensorFlow RNN LSTM

Jul*_*man 8 python neural-network python-3.x lstm tensorflow

(我正在测试我写短而有效的问题的能力,所以让我知道我在这里做了什么)

我正在尝试训练/测试TensorFlow递归神经网络,特别是LSTM,以及以下ndarray格式的时间序列数据的一些试验:

[[[time_step_trial_0, feature, feature, ...]
  [time_step_trial_0, feature, feature, ...]]                  
 [[time_step_trial_1, feature, feature, ...]
  [time_step_trial_1, feature, feature, ...]]
 [[time_step_trial_2, feature, feature, ...]
  [time_step_trial_2, feature, feature, ...]]]
Run Code Online (Sandbox Code Playgroud)

此3darray 的1d部分包含时间步长和在该时间步骤观察到的所有特征值.所述2D块包含所有一维数组中一个试验中观察到(时间步长).所述三维块包含记录的时间序列数据集中的所有2D块(试验).对于每个试验,时间步频率是恒定的,并且所有试验的窗口间隔相同(0到50秒,0到50秒等).

例如,我获得了一级方程式赛车的数据,例如扭矩,速度,加速度,旋转速度等.在每0.5秒记录时间步长的一定时间间隔内,我形成每个时间步长的1d阵列与记录的记录功能那个时候一步.然后我围绕所有时间步骤形成一个2D阵列,对应于一个一级方程式赛车在赛道上的运行.我创建了一个包含所有F1赛车及其时间序列数据的最终3D阵列.我想训练和测试一个模型,以检测新车赛道上F1常见轨迹的异常情况.

我目前知道TensorFlow模型支持2d阵列进行训练和测试.我想知道为了能够在这个3darray中包含的所有独立试验(2d)上训练和测试模型,我必须经历哪些程序.此外,我将来会增加更多的试验.那么,为了不断用新的数据/试验来更新我的模型以加强我的LSTM,需要通过哪些正确的程序.

这是我试图最初为人类活动以外的其他目的复制的模型:https://github.com/guillaume-chevalier/LSTM-Human-Activity-Recognition.另一个更可行的模型是我更愿意在时间序列数据中查看异常检测:https://arxiv.org/abs/1607.00148.我想构建一个给出一组非异常时间序列训练数据的异常检测模型,我们可以检测测试数据中的异常,其中随着时间的推移将部分数据定义为"不在家庭中".

vij*_*y m 1

您的输入形状和相应的模型取决于您想要检测的异常类型。您可以考虑:

1. 仅特征异常: 在这里,您考虑单个特征并确定其中是否有异常,而不考虑其测量时间。在您的示例中,如果一个或多个特征相对于其他特征而言是异常值,则特征 [扭矩、速度、加速度...] 是异常值。在这种情况下,您的输入应该是 form [batch, features]

2. 时间特征异常: 这里您的输入取决于您测量特征的时间。您当前的功能可能取决于之前随时间测量的功能。例如,可能存在一个特征,如果它出现在时间 0,则其值是离群值,但如果它出现在未来时间,则其值不是离群值。在这种情况下,您可以用重叠的时间窗口划分每条轨迹,并形成一个 形式的特征集[batch, time_window, features]

从(1)使用自动编码器开始应该非常简单,您可以在其中训练自动编码器,并且根据输入和输出之间的误差,您可以选择一个阈值,例如与均值的 2 个标准偏差,以确定它是异常值还是异常值不是。

对于(2),您可以使用 seq2seq 模型遵循您提到的第二篇论文,其中您的解码器错误将确定哪些特征是异常值。您可以检查模型的实现情况。