【问题标题】:How to deal with large csv file when training a deep learning model?训练深度学习模型时如何处理大的csv文件?
【发布时间】:2020-05-11 13:53:49
【问题描述】:

我有一个用于训练深度学习模型的庞大数据集。它采用 .csv 格式。它大约 2GB,现在,我只是用 pandas 将整个数据加载到内存中。

df = pd.read_csv('test.csv')

然后将所有内容提供到 keras 模型中,然后像下面这样训练模型,

model.fit(df, targets)

我想知道在处理大型数据集时还有哪些其他选择。像大约 10 GB(或)的东西。我没有内存来将所有内容加载到内存中并将其传递给模型。

我能想到的一种方法是以某种方式从 .csv 文件中获取数据的随机样本/子集,并通过数据生成器使用它,但问题是我找不到任何方法来读取csv 文件,无需将所有内容加载到内存中。

如何在不将所有内容加载到内存的情况下训练模型?如果您有任何解决方案并且它使用一些内存,那也没关系。请告诉我。

【问题讨论】:

  • @aws_apprentice 只有这样吗?
  • 文档提到你可以提供一个 generator 作为你的x 参数,所以这是一个选项,尽管在后台我假设keras 无论如何都会加载它?这就是文档所说的,A generator or keras.utils.Sequence returning (inputs, targets) or (inputs, targets, sample weights).
  • 它最终必须全部加载/处理,但如果您使用Sequence,它可以随时卸载较早的部分。 CSV 文件不适合这个(随机访问很困难),我建议将一个大的 CSV 文件分成几个较小的文件,或者使用其他文件格式
  • 参见例如stanford.edu/~shervine/blog/…@dominicXDhough 我认为这更多是关于 keras 而不是 CSV/Pandas 处理
  • 如果 Keras 中的这个模型支持在线学习,那可能会有所帮助。此外,如果它可以采用非熊猫输入,您可能会节省大量内存,避免构建 DataFrame。

标签: python tensorflow keras deep-learning


【解决方案1】:

我以前没有使用过这个功能,但可能是这样的:

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

会工作的。您需要通过将 10GB 文件拆分为例如 10 个较小的文件来预处理数据。如果您的 CSV 文件每行有一条记录,则 Unix split 实用程序可能就足够了(大多数情况下)

作为如何使用它的不完整示例:

seq = CsvSequence([
  'data-1', 'data-2', 'data-3'])

model.fit_generator(seq)

但请注意,您很快就会想要做一些更有效率的事情,以上内容会导致您的 CSV 文件被多次读取。如果这次加载比其他所有内容加起来花费的时间更多,我不会感到惊讶

一个建议是在训练之前对文件进行预处理,saving them to numpy binary files。然后二进制文件可以mmaped in while loading 效率更高。

【讨论】:

  • 这将如何工作?你能解释一下吗?将我们的主数据集拆分为多个文件后。这个类会加载每个文件吗?如何连接数据生成器,然后连接到 keras fit
  • 您只需使用model.fit_generator,传递此类的一个实例。请注意,使用 CSV 文件效率非常低,并且会浪费大量时间从磁盘重新加载文件。你会想要使用可以有效阅读的东西(或者最好是mmaped in)。也许看看numpy.load 看看它能处理什么
猜你喜欢
  • 2020-11-10
  • 2019-11-30
  • 2021-05-05
  • 2018-01-09
  • 1970-01-01
  • 1970-01-01
  • 2017-10-12
  • 2020-04-07
  • 2020-06-08
相关资源
最近更新 更多