python - 将 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
定义要使用的滞后数。
解决方案
推荐阅读
- express - 我可以在单个节点服务器上结合 Express 和 FTP 吗?
- micropython - 有谁知道我如何用python将鼠标放在中间?
- javascript - Typescript: how can I have completion for dynamics method/functions of a class (registered at runtime)?
- html - 这些元属性有什么作用?
- node.js - 使用 npm 命令安装 TailwindCSS 时出现“源文本中无法识别的标记”错误
- c++ - 从具有用户声明的 dtor 和移动支持的抽象基础派生
- r - 如何使用 R mutate 函数转换 NA 值?
- javascript - 使用 X-Auth 和 Bearer 令牌在登录后进行 Webscraping
- python - 如果任务失败,我如何召回“任务”?
- java - 为 Java 地图实现分页