用于LSTM-RNN训练的填充时间序列子序列

Mic*_*tti 10 machine-learning padding deep-learning lstm recurrent-neural-network

我有一个时间序列数据集,我用它作为LSTM-RNN的输入,用于行动预期.时间序列包括30fps(即150个数据点)的5秒时间,并且数据表示面部特征的位置/移动.

我从我的数据集中采样较小长度的其他子序列,以便在数据集中添加冗余并减少过度拟合.在这种情况下,我知道子序列的开始和结束帧.

为了批量训练模型,所有时间序列需要具有相同的长度,并且根据文献中的许多论文填充不应该影响网络的性能.

例:

原始序列:

 1 2 3 4 5 6 7 8 9 10
Run Code Online (Sandbox Code Playgroud)

子序列:

4 5 6 7
8 9 10
2 3 4 5 6
Run Code Online (Sandbox Code Playgroud)

考虑到我的网络正在试图预测一个动作(意味着一旦P(动作)>阈值从t = 0变为T = tmax,它将预测该动作)填充的位置是否重要?

选项1:零替换原始值

0 0 0 4 5 6 7 0 0 0
0 0 0 0 0 0 0 8 9 10
0 2 3 4 5 6 0 0 0 0
Run Code Online (Sandbox Code Playgroud)

选项2:最后全部为零

4 5 6 7 0 0 0 0 0 0 
8 9 10 0 0 0 0 0 0 0
2 3 4 5 0 0 0 0 0 0
Run Code Online (Sandbox Code Playgroud)

此外,一些时间序列缺少一些帧,但不知道它们是哪些 - 意味着如果我们只有60帧,我们不知道它们是从0到2秒,从1这些需要在甚至采取子序列之前进行填充.在这种情况下,填充的最佳做法是什么?

先感谢您.

MGo*_*ksu 9

LSTM和RNN的最强大属性一般是它们的参数沿时间帧共享(参数在时间帧上重复)但参数共享依赖于相同参数可用于不同时间步长的假设,即上一个时间步骤和下一个时间步骤依赖于t,如第388页第2段所述.

简而言之,填充零结尾,理论上不应该改变模型的准确性.我在理论上使用了副词,因为在每个时间步骤LSTM的决定取决于其细胞状态以及其他因素,并且该细胞状态是过去帧的简短概述.据我所知,在你的情况下,过去的帧可能会丢失.我想你在这里有一点权衡.

我宁愿在最后填充零,因为它不会与RNN的基本假设完全冲突,并且实现和跟踪更方便.

在实现方面,我知道一旦你给出序列和每个样本的实际序列大小,tensorflow会计算损失函数(例如,对于4 5 6 7 0 0 0 0 0 0,你还需要给它实际的大小,即这里假设您正在实施选项2.我不知道是否存在选项1的实现.


小智 5

最好一开始就使用零填充,因为本文提出了填充对LSTM和CNN的影响

尽管后填充模型在6个时期达到最高效率,并在此之后开始过拟合,但其准确性远低于预填充。

检查表1,其中填充前(填充零开头)的准确性大约为80%,但对于填充后(末填充零结尾)的准确性仅为50%左右