Python 用于时间序列分类的Tensorflow数据集API

Python 用于时间序列分类的Tensorflow数据集API,python,tensorflow,tensorflow-datasets,Python,Tensorflow,Tensorflow Datasets,我已经习惯了新的数据集API,并尝试进行一些时间序列分类。我有一个格式化为tf记录的数据集,形状如下: (时间步长x功能)。此外,我有一个标签,为每一个时间步骤。 (时间步长x1) 我要做的是重新格式化数据集,使其具有如下滚动时间窗口: (nx窗口大小x功能)。n为时间量\u步长-窗口大小(如果滚动窗口的步长为1) 标签应该是 (窗口大小x 1),这意味着我们将获取窗口中最后一步的标签 我已经知道,我可以使用tf.sliding\u window\u batch()为功能创建滑动窗口。但是,标签

我已经习惯了新的数据集API,并尝试进行一些时间序列分类。我有一个格式化为tf记录的数据集,形状如下:
(时间步长x功能)
。此外,我有一个标签,为每一个时间步骤。
(时间步长x1)

我要做的是重新格式化数据集,使其具有如下滚动时间窗口:
(nx窗口大小x功能)
n
为时间量\u步长-窗口大小(如果滚动窗口的步长为1)

标签应该是
(窗口大小x 1)
,这意味着我们将获取窗口中最后一步的标签

我已经知道,我可以使用
tf.sliding\u window\u batch()
为功能创建滑动窗口。但是,标签的形状是相同的,我不知道如何正确地做到这一点:
(nx窗口大小x1

如何使用tensorflow数据集API实现这一点?


谢谢你的帮助!

我不知道怎么做,但我想我还是用numpy来做吧

我发现这很好,并将其应用到我的案例中

后来它只是像这样使用numpy:

train_df2 = window_nd(train_df, 50, steps=1, axis=0)
train_features = train_df2[:,:,:-1]
train_labels = train_df2[:,:,-1:].squeeze()[:,-1:]
train_labels.shape

我的标签是最后一列,因此您可能需要对此进行一些调整。

我有一个TF1.13的缓慢解决方案

    WIN_SIZE= 5000

dataset_input = tf.data.Dataset.from_tensor_slices(data1).window(size= WIN_SIZE,
                                                             shift= WIN_SIZE,
                                                             drop_remainder= False).flat_map(lambda x: 
                                                                                            x.batch(WIN_SIZE))

dataset_label = tf.data.Dataset.from_tensor_slices(data2).window(size= WIN_SIZE,
                                                             shift= WIN_SIZE,
                                                             drop_remainder= False).flat_map(lambda x: 
                                                                                            x.batch(WIN_SIZE)).map(lambda x:
                                                                                                                  x[-1])
dataset= tf.data.Dataset.zip((dataset_input, dataset_label))
dataset= dataset.repeat(1)
data_iter = dataset.make_one_shot_iterator() # create the iterator
next_sample= data_iter.get_next()

with tf.Session() as sess:
    i=0
    while True:
        try:
            r_= sess.run(next_sample)
            i+=1
            print(i)
            print(r_)
            print(r_[0].shape)
            print(r_[1].shape)

        except tf.errors.OutOfRangeError:
            print('end')
            break
我之所以说“慢解决方案”,可能是因为下面的代码片段可以优化,但我还没有完成:

dataset_label = tf.data.Dataset.from_tensor_slices(data2).window(size= WIN_SIZE,
                                                         shift= WIN_SIZE,
                                                         drop_remainder= False).flat_map(lambda x: 
                                                                                        x.batch(WIN_SIZE)).map(lambda x:
                                                                                                              x[-1])

一个很有希望的解决方案可能会找到一些“跳过”操作来跳过数据集标签中的无用值,而不是使用“窗口”操作(现在是)。

你能将我们链接到你在帖子中提到的“新数据集API”吗?也许它不再那么新了,至少对我来说是这样。很抱歉造成混淆:)非常感谢。我会试着在五月份查一下这个——现在,我一直很忙。