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这些需要在甚至采取子序列之前进行填充.在这种情况下,填充的最佳做法是什么?
先感谢您.
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%左右