首页 > 解决方案 > 将 tfRecord 文件用于具有可变滞后的时间序列

问题描述

我正在使用 tensorflow 进行时间序列预测。使用的时间序列每天大约有 10,000 个数据点,与 tf.Dataset API 配合得很好。要使用日内数据(每 5 分钟一次),我想知道是否有更有效的方法来导入我的数据,因为每次我重新初始化数据集迭代器时,我都会继续使用 feed_dicts(效率低下)指向我的 numpy 数组训练或验证集。这变得更加重要,因为我通常在每个 epoch 之后运行验证或测试集,这意味着迭代器在每个 epoch 重新初始化两次。

我的数据通常是这样导入的:

   dataset = tf.data.Dataset.from_tensor_slices((X, 
   Y)).batch(batch_size)

   iterator = dataset.make_initializable_iterator()
   input, label = iterator.get_next()

其中 X 和 Y 是占位符。

目前,我的数据是使用带有 numpy 数组的简单函数进行预处理的,我在其中设置了滞后数以解释单个时间步长(例如:标签 [3] 的 [0,1,2]),我也每次更改经常去训练。因为我正在更改输入数据的滞后,所以我没有固定的 (feature,label) 对来构建我的 TfRecord 文件。

我的问题是是否值得创建一个仅包含一个特征(原始时间序列)的 Tfrecord 文件,根据我选择的滞后时间将其修改为(特征、标签)对。

我问,因为它可能是获得的时间并不重要,因为无论如何都应该映射数据集,或者这是其他可能的解决方案(我想到的一个想法是使用dataset.repeat()andfor epoch in range(num_batches):而不是 while 循环,尽管我认为它必须与每次错误后重新初始化迭代器相同Tf.OutOfRangeError,因此没有增益)。

如果值得创建 tfrecord 文件,您能否使用数据集 API 提供一些实现?我尝试创建一个类似于此答案的单个功能文件,但没有任何解决方案,因为我无法正确解析数据。

Ps:这很简单,但最好包含代码来创建我的功能,来自时间序列的实验室:

def lags(data, t_steps, label=False):
    data_=[]
    for i in range(len(data)-t_steps):
        if label:
            data_.append(data[i+t_steps])
        else:
            data_.append(data[i:i+t_steps])
    return np.array(data_)

其中t_steps定义要使用的滞后数。

标签: pythontensorflow

解决方案


推荐阅读