将时间序列元素的Tensorflow数据集转换为窗口序列的数据集

dev*_*vin 5 tensorflow

我有一个tf.data.Dataset(r1.4),其元素表示一个时间序列。例如(换行符分隔单独的元素):
1 2 3 4 5 6 7 8 9

现在,我要在其上运行窗口操作,以便获得长度为WINDOW_SIZE的子序列的数据集,以训练RNN。例如,对于WINDOW_SIZE = 4:

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

我可以找到的最接近的数据集op是tf.contrib.data.group_by_window,但是不确定如何在此用例中应用它。
另一种方法是使用tf.contrib.data.batch_and_drop_remainder,但它将元素划分为存储桶,并且不会包含所有子序列。
我想到的第三个选项是创建WINDOW_SIZE迭代器,并分别运行它们,使其指向连续的元素,然后按顺序开始使用它们。但是,这看上去与直觉相反。

Min*_*ark 6

在 TensorFlow 2.0 中,Dataset该类现在有一个window()方法。你可以这样使用它:

import tensorflow as tf

dataset = tf.data.Dataset.from_tensor_slices(tf.range(10))
dataset = dataset.window(5, shift=1, drop_remainder=True)
for window in dataset:
    print([elem.numpy() for elem in window])
Run Code Online (Sandbox Code Playgroud)

它会输出:

[0, 1, 2, 3, 4]
[1, 2, 3, 4, 5]
[2, 3, 4, 5, 6]
[3, 4, 5, 6, 7]
[4, 5, 6, 7, 8]
[5, 6, 7, 8, 9]
Run Code Online (Sandbox Code Playgroud)