machine-learning - 填充 LSTM-RNN 训练的时间序列子序列

标签 machine-learning deep-learning padding lstm recurrent-neural-network

我有一个时间序列数据集,用作 LSTM-RNN 的输入以进行 Action 预测。该时间序列包括 5 秒、30 fps 的时间(即 150 个数据点),数据代表面部特征的位置/运动。

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

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

示例:

原始序列:

 1 2 3 4 5 6 7 8 9 10

子序列:

4 5 6 7
8 9 10
2 3 4 5 6

考虑到我的网络正在尝试预测一个 Action (这意味着一旦 P(action) > 阈值从 t = 0 到 T = tmax,它将预测该 Action )填充的位置重要吗?

选项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

选项 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

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

提前谢谢您。

最佳答案

一般来说,LSTM 和 RNN 最强大的属性是它们的参数在时间范围内共享(参数在时间范围内重复),但参数共享依赖于相同参数可以被共享的假设。用于不同的时间步长,即前一个时间步长和下一个时间步长之间的关系取决于 t,如所解释的 here in page 388, 2nd paragraph .

简而言之,理论上,在末尾填充零应该不会改变模型的准确性。我理论上使用了副词,因为在每个时间步骤,LSTM 的决策都取决于其细胞状态以及其他因素,而该细胞状态是对过去帧的简短总结。据我了解,您的情况可能会丢失过去的帧。我认为你在这里所做的是一个小小的权衡。

我宁愿在末尾补零,因为它与 RNN 的基本假设并不完全冲突,而且更方便实现和跟踪。

在实现方面,我知道一旦你给它序列和每个样本的实际序列大小, tensorflow 就会计算损失函数(例如,对于 4 5 6 7 0 0 0 0 0 0 你还需要给它实际的序列大小) size(此处为 4))假设您正在实现选项 2。不过,我不知道是否有选项 1 的实现。

关于machine-learning - 填充 LSTM-RNN 训练的时间序列子序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44131718/

相关文章:

machine-learning - Word to Vector 中的线性激活函数

machine-learning - 有关使用神经网络进行 Q-Learning 的问题

machine-learning - Weka 的不同测试选项意味着什么?

r - 如何将单词列表 (chr) 与数据帧中多列中的值进行比较,并在 R 中存在匹配时输出二进制响应

tensorflow - Faster Rcnn Box Coder 中比例因子的作用是什么?

tensorflow - 将张量板直方图与 tf.contrib.layers 一起使用

machine-learning - yolo算法的坐标输出代表什么?

swift - 填充一个用于打印的快速字符串

java - 如何将填充添加到字节数组?

html - 使用较小的浏览器窗口优雅地向某些元素的左右边缘添加填充