如何将Keras数据生成器(或不同方法)用于具有不同长度的多个.npy文件?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将Keras数据生成器(或不同方法)用于具有不同长度的多个.npy文件?相关的知识,希望对你有一定的参考价值。

我正在处理30,000个.npy文件的数据集。每个文件都包含以下格式的矩阵:(75,N),其中75是列数,代表要素数。N:行数,这些功能的值随时间而变化,并且与文件不同。

我尝试使用keras文档here中提到的TimeseriesGenerator:

data_gen = TimeseriesGenerator(data, targets,
                               length=10, sampling_rate=2,
                               batch_size=2)
  1. 如何对多个npy文件使用此方法?
  2. 每个文件是否必须与目标数组或每一列中的类匹配?
答案

我通过创建自定义序列解决了这个问题。自定义序列连接不同的序列。这样,当某个时间序列结束时,将给出较小的批次,然后继续进行下一个序列。

from keras.utils import Sequence

class ConcatGenerator(Sequence):
  # series is a list of timeseires generators
  def __init__(self, series, *args, **kwargs):
    super(*args, **kwargs)
    self.series = series

  def __len__(self):
    return sum([len(s) for s in self.series])

  def __getitem__(self, idx):
    cur = 0
    while idx >= len(self.series[cur]):
        idx -= len(self.series[cur])
        cur += 1
    return self.series[cur][idx]

请注意,这是玩具代码,您可以使获取商品的效率更高。

因此,在您的情况下,您将从每个npy文件创建一个时间序列生成器,然后使用它们创建一个ConcatGenerator。

以上是关于如何将Keras数据生成器(或不同方法)用于具有不同长度的多个.npy文件?的主要内容,如果未能解决你的问题,请参考以下文章

用于非图像数据格式的多任务学习的 keras 数据生成器

Keras减少过拟合的秘诀——Dropout正则化

如何将多个 CSV 数据集以适合 Keras 中的模型?

在预测期间,数据规范化如何在 keras 中工作?

Keras深度学习实战(26)——文档向量详解

Keras深度学习实战(24)——从零开始构建单词向量