【问题标题】:Training text corpus too big to load into memory训练文本语料库太大而无法加载到内存中
【发布时间】:2018-12-04 03:20:16
【问题描述】:

我创建了一个 2-stacked LSTM 模型,我想在最近的英文维基百科文章转储(15.1 GB 文本)上对其进行训练。我无法将语料库加载到文本变量中以进行词嵌入。 Keras RNN 模型通常如何在如此庞大的文本语料库上进行训练以避免内存错误?

尝试打开 15.1 GB 文件后:

text = open('/home/connor/Desktop/wiki_en.txt').read().lower()

我收到此错误消息:

(结果,消耗)= self._buffer_decode(数据,self.errors,最终) 内存错误

【问题讨论】:

  • 或者看看其他向您的网络提供数据的方式(例如,如果您使用 Tensorflow 的后端,则使用生成器或tf.Datasets)

标签: python keras out-of-memory lstm rnn


【解决方案1】:

您实际上自己回答了您的问题。 文件太大,无法放入 RAM 内存。

与其尝试一次将所有内容读入内存,不如尝试逐行处理它。例如

with open('....') as wiki_en: 
   for line in wiki_en: 
       line.lower()
       #do some more processing

【讨论】:

    【解决方案2】:

    我的深度学习项目也遇到了同样的问题。我可以建议 2 个选项:

    1. 编辑:您应该考虑使用一些序列化程序库将您的数据 转换成小的二进制片段(这个blog 可以帮助选择一个库)。由于您正在处理文本数据,因此您可以将数据拆分为有意义的小片段(例如,假设数据包含不同类型的新闻,它可能会被视为政治、体育、健康等不同的文本文件 - 批次)。然后,您可以逐批读取创建的文本文件并适合您的模型进行训练。由于我对您的文本数据一无所知,因此只是试图照亮道路!我刚刚删除了二进制大小写,因为它是一种错误的解决方法。

    2. Keras 有自己的fit_generator 方法,请从here 中查看。简单地说,该方法接受一个参数,该参数是一个生成批次并使用生成的批次训练模型的函数。这允许在 GPU 并行处理训练过程时使用 CPU 生成批次

    顺便说一句,我使用了第二个,它的速度更快;) 希望对你有帮助。

    问候

    【讨论】:

      【解决方案3】:

      您可以使用 tds 库克服内置的内存限制,它允许您构建不受内存上限限制的或多或少的等效结构。这对您的硬件限制没有帮助,但您将能够拥有大于 2 GB 的表之类的东西。

      https://github.com/torch/tds

      【讨论】:

      • 没有。它不会有帮助。问题不是硬件或软件限制,而是使用数据的错误方法。您根本无法一次将如此巨大的文件(15.1GB 或更多)加载到内存中。如果文件大小为 15.1 PB 怎么办?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      • 2015-05-26
      • 1970-01-01
      • 2021-10-22
      • 1970-01-01
      相关资源
      最近更新 更多