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

时间:2019-07-03 09:56:09

标签: python keras deep-learning

我正在处理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. 每个文件都必须与目标数组或每一列中的类进行匹配吗?

1 个答案:

答案 0 :(得分:0)

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

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。