我正在使用tensorflow进行时间序列预测。 所使用的时间序列约为每日10,000个数据点,与tf.Dataset API配合使用时效果很好。 要使用日内数据(每5分钟一次),我想知道是否有更有效的方式导入数据,因为每次我重新初始化数据集迭代器时,我都会不断使用feed_dicts(效率低下)指向我的numpy数组培训或验证集。这一点变得越来越重要,因为我通常在每个时期之后运行验证或测试集,这意味着迭代器在每个时期都要重新初始化两次。
我的数据通常是这样导入的:
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]),我也经常改变训练。 因为我正在更改输入数据的滞后,所以没有固定的(功能,标签)对来构造TfRecord文件。
我的问题是,是否值得创建一个功能(原始时间序列)仅一个功能的Tfrecord文件,然后根据我选择的延迟将其修改为(功能,标签)对。 < / p>
我问,因为获得的时间可能并不重要,因为无论如何都应该映射数据集,或者这是其他可能的解决方案(我想到的一个想法是使用dataset.repeat()
和{{1} }而不是while循环,尽管我认为它必须与在每个for epoch in range(num_batches):
错误之后重新初始化迭代器相同,所以没有收益。
如果值得创建tfrecord文件,可以使用数据集API提供一些实现吗?我试图创建一个类似于此answer的功能文件,但由于无法正确解析数据而没有任何解决方案。
Ps:这很简单,但是最好包含代码以创建我的功能,并按时间序列标注:
Tf.OutOfRangeError
其中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_)
定义了要使用的滞后次数。