Python 用于时间序列分类的Tensorflow数据集API
我已经习惯了新的数据集API,并尝试进行一些时间序列分类。我有一个格式化为tf记录的数据集,形状如下: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()为功能创建滑动窗口。但是,标签
(时间步长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”吗?也许它不再那么新了,至少对我来说是这样。很抱歉造成混淆:)非常感谢。我会试着在五月份查一下这个——现在,我一直很忙。