【问题标题】:How to load huge time series windows dataset without memory errors?如何在没有内存错误的情况下加载巨大的时间序列 Windows 数据集?
【发布时间】:2022-01-18 01:03:13
【问题描述】:

我想将大约 100 万行的典型时间序列数据集转换为具有 50% 重叠的 100 项窗口。请注意,它是一个多变量的,例如,给定 8 个特征和 1000 个包含 100 个项目的窗口,最终形状将是 (1000, 100, 8) 替换 (n_samples, n_timesteps, n_features)。目标是用它来训练机器学习算法,包括深度神经网络。

到目前为止,我很喜欢使用 numpy 的 sliding_window_view,如下所示;

x = np.arange(100).reshape(20, 5)
v = sliding_window_view(x, (3, 5))
v

不幸的是,当我在数百万行的大型数据集中用完 RAM 时出现崩溃。你有什么建议吗?

此外,一个严重的限制是每个时间步长(整数)都有一个连续标签,数据集需要根据该标签进行分组(使用pandas),因此这限制了部分读取它的一些选项。

【问题讨论】:

    标签: numpy tensorflow pytorch


    【解决方案1】:

    我想你正在寻找tf.data.Dataset。我正在处理一百万行数据集,以下代码对我来说运行良好:

    convert = tf.data.TextLineDataset("path_to_file.txt")
    dataset = tf.data.Dataset.zip(convert)
    

    现在你已经初始化了你的数据集,但是不要陷入内存问题:

    def dataset_batches(ds, batch_size):
      return (
          ds
          .cache()
          .batch(batch_size)
          .prefetch(tf.data.AUTOTUNE) )
          # you can do more operations here
    
    train_batches = dataset_batches(dataset, 64)
    

    要运行它,你必须循环:

    for (batch, row) in enumerate(train_batche):
       # do stuff
       # batch = current batch (0, 1, 2, ...) so if your dataset has 1600 rows and you've used batch_size=16 you'll have 100 batches
       # row is the actual data (tensor)
    

    【讨论】:

    • 谢谢,但是当您需要制作滑动窗口并在之后随机播放它们时会发生什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-03
    • 2012-11-27
    • 1970-01-01
    • 2011-06-13
    • 1970-01-01
    • 2023-03-13
    相关资源
    最近更新 更多