我有一个巨大的数据集来训练深度学习模型。它是.csv格式的。它大约是2 2GB,现在,我只是使用pandas将整个数据加载到内存中。
df = pd.read_csv('test.csv')然后将所有内容提供给keras模型,然后像下面这样训练模型,
model.fit(df, targets)我想知道在处理大型数据集时,我还有什么其他选择。大约10 GB (或)左右。我没有ram将所有内容加载到内存中,并将其传递给模型。
我能想到的一种方法是以某种方式从.csv文件中获取随机样本/数据子集,并通过数据生成器使用它,但问题是,如果不将所有内容加载到内存中,我找不到任何方法来读取csv文件的子集/样本。
如何在不将所有内容加载到内存的情况下训练模型?如果您有任何解决方案,并且它使用了一些内存,这是可以的。告诉我就行了。
发布于 2020-01-25 22:28:38
我以前没有使用过这个功能,但可能是这样的:
class CsvSequence(Sequence):
def __init__(self, batchnames):
self.batchnames = batchnames
def __len__(self):
return len(self.batchnames)
def __getitem__(self, i):
name = self.batchnames[i]
X = pd.read_csv(name + '-X.csv')
Y = pd.read_csv(name + '-Y.csv')
return X, Y会起作用的。您需要通过将10 10的文件拆分成10个较小的文件来对数据进行预处理。如果您的split文件每行有一条记录(大多数都是这样),那么Unix CSV实用程序就足够了。
这是一个不完整的示例,说明了如何使用此命令:
seq = CsvSequence([
'data-1', 'data-2', 'data-3'])
model.fit_generator(seq)但请注意,您很快就会想要做一些更有效的事情,上面的操作会导致您的CSV文件被多次读取。如果这个加载花费的时间比其他一切加在一起的时间还多,我也不会感到惊讶
一个建议是在训练之前对文件进行预处理,saving them to numpy binary files。二进制文件然后可以mmaped in while loading,这是更有效的。
https://stackoverflow.com/questions/59909965
复制相似问题