如何将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)
- 如何对多个npy文件使用此方法?
- 每个文件是否必须与目标数组或每一列中的类匹配?
答案
我通过创建自定义序列解决了这个问题。自定义序列连接不同的序列。这样,当某个时间序列结束时,将给出较小的批次,然后继续进行下一个序列。
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文件?的主要内容,如果未能解决你的问题,请参考以下文章