如何窗口 make_csv_dataset()

How to window make_csv_dataset()

提问人:Didlex 提问时间:10/27/2023 最后编辑:Didlex 更新时间:10/30/2023 访问量:29

问:

我正在尝试从 csv 文件中窗口一些数据进行时间序列训练,但是当我从中创建数据集并尝试将其窗口化时:make_csv_dataset()

def window_data(self, data_ds, window_size, shift):
    data_ds = data_ds.window(window_size, shift=shift, drop_remainder=True).flat_map(
        lambda x: x.batch(300, drop_remainder=True))
    return data_ds

它不起作用,再往下看,你会看到我试图调和它的东西。但似乎我从make_csv_function那里得到了一个 PrefetchDataset。这是打印出来的整个内容:<PrefetchDataset element_spec=(OrderedDict([('close', TensorSpec(shape=(None,), dtype=tf.float32, name=None)), ('volume', TensorSpec(shape=(None,), dtype=tf.float32, name=None)), ('pricechange', TensorSpec(shape=(None,), dtype=tf.float32, name=None)), ('sma', TensorSpec(shape=(None,), dtype=tf.float32, name=None)), ('macd', TensorSpec(shape=(None,), dtype=tf.float32, name=None)), ('macdsignal', TensorSpec(shape=(None,), dtype=tf.float32, name=None)), ('macdhist', TensorSpec(shape=(None,), dtype=tf.float32, name=None)), ('upperband', TensorSpec(shape=(None,), dtype=tf.float32, name=None)), ('middleband', TensorSpec(shape=(None,), dtype=tf.float32, name=None)), ('lowerband', TensorSpec(shape=(None,), dtype=tf.float32, name=None)), ('rsi', TensorSpec(shape=(None,), dtype=tf.float32, name=None)), ('slowk', TensorSpec(shape=(None,), dtype=tf.float32, name=None)), ('slowd', TensorSpec(shape=(None,), dtype=tf.float32, name=None)), ('cci', TensorSpec(shape=(None,), dtype=tf.float32, name=None)), ('adx', TensorSpec(shape=(None,), dtype=tf.float32, name=None)), ('atr', TensorSpec(shape=(None,), dtype=tf.float32, name=None))]), TensorSpec(shape=(None,), dtype=tf.float32, name=None))>

我是否需要某种开箱操作来打开它?我不只是使用 Pandas 数据集的原因是因为它对于我的 RAM 来说太大了。

从本质上讲,我的问题是我无法正确地将其设置为窗口并将其用作可批处理的数据集,一次可以容纳我的 ram。

运行该函数时,我收到以下错误消息: 'TypeError:在用户代码中:window_data()

TypeError: outer_factory.<locals>.inner_factory.<locals>.<lambda>() takes 1 positional argument but 2 were given`

如果我向 lambda 添加另一个变量来解决最后一个错误,我会得到以下代码:

data_ds = data_ds.window(window_size, shift=shift, drop_remainder=True).flat_map(
            lambda x, y: x.batch(300, drop_remainder=True))

最后,如果我使用 ,它可以工作,但是如果我使用 ,我会得到这个:y.batch()x.batch() AttributeError: 'collections.OrderedDict' object has no attribute 'batch'

当它以 y 成功完成时,我得到这个形状为 300 的 FlatMapDataset,而它应该是(行、300、16)。

此代码打印出 2 批次的正确值(仅 2 批,以便于测试):

for batch, label in self.data_ds.take(1):
    for key, value in batch.items():
        print(f"""{key:20s}: {value}""")
        
    print(f"""{'label':20s}: {label}""")

而它的输出正是它应该有的样子:

收盘价 : [1.08432 1.08432] 音量 : [0.9 0.9] 价格变化 : [0. 0.] SMA:[1.0843693 1.0843579] MACD格式:[-1.1817355E-05 -1.3658963E-05] MACD信号:[ 2.8224192E-06 -4.7385743E-07] 麦克迪斯特 : [-1.4639773E-05 -1.3185107E-05] 上频段 : [1.0843611 1.0843513] 中间带 : [1.084334 1.084328] 下限 : [1.0843068 1.0843047] 相对应价 : [34.758636 34.758636] 斯洛克:[-9.4739034e-15 -9.4739034e-15] 减速 : [22.222221 7.4074073] CCI : [-79.432625 -81.58508 ] 广告 : [52.57429 50.354332] 地址:[1.6490874E-05 1.5312955E-05] 标签 : [1. 1.]

python tensorflow tensorflow-datasets 数据预处理

评论


答: 暂无答案