对于Tensorflow/Keras,是否有一种方法可以分割输入数据进行培训,这样我就不会’;内存用完了吗?

对于Tensorflow/Keras,是否有一种方法可以分割输入数据进行培训,这样我就不会’;内存用完了吗?,tensorflow,audio,keras,deep-learning,training-data,Tensorflow,Audio,Keras,Deep Learning,Training Data,我使用tensorflow和Keras通过conv1d层处理音频数据,但是,我的RAM不足(只有8GB可用)。我有一个input.wav和一个target.wav供网络学习,每个文件是40MB(大约4分钟的音频) 在这个模型中,从之前的200个样本中学习一个音频样本。为了实现这一点,我将(例如)输入8000000个样本,并将其“展开”到(8000000、200、1)中,其中每个音频样本成为前200个样本的数组。然后我调用“model.fit(展开的输入样本,目标样本)” 问题是,在展开输入数据时

我使用tensorflow和Keras通过conv1d层处理音频数据,但是,我的RAM不足(只有8GB可用)。我有一个input.wav和一个target.wav供网络学习,每个文件是40MB(大约4分钟的音频)

在这个模型中,从之前的200个样本中学习一个音频样本。为了实现这一点,我将(例如)输入8000000个样本,并将其“展开”到(8000000、200、1)中,其中每个音频样本成为前200个样本的数组。然后我调用“model.fit(展开的输入样本,目标样本)”


问题是,在展开输入数据时,RAM很快就用完了。在仍然告诉Tensorflow如何为每个数据点使用之前的200个样本的情况下,有没有办法创建这个庞大的阵列?我是否可以将未展开的输入数组拆分为块,并将每个块传递给fit(),而无需开始新的纪元?或者有没有更简单的方法用Tensorflow来实现这一点。

也许这对你有帮助:我发现第二个答案非常适合你的问题。似乎您可以使用tensorflow中的dataset api从磁盘迭代加载数据,这可能会起作用,感谢您向我展示了这一点。它解决了我最初的问题,但我也不希望磁盘上有一个大文件。我正在寻找一种迭代索引传递到第一个conv1d层的数据的方法。然后我只需输入40MB wav文件,然后告诉fit()函数获取数据[I:I+200],其中“I”是一个计数器。我尝试使用自定义模型类并重写“train_step”和“call”函数,但我仍然不清楚在哪里可以自定义为每个示例训练的数据。不知道您是否已经尝试了sequence api。这和你的用法相似:我还没有试过,但它看起来确实适合我需要的东西。我将尝试实现它,谢谢!在看了几个例子之后,我相信Sequence类正是我所需要的。非常感谢。