训练文本语料库太大而无法加载到内存中

时间:2018-06-25 14:01:11

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

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

尝试使用以下方法打开15.1 GB的文件后:

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

我收到此错误消息:

  

(结果,已消耗)= self._buffer_decode(数据,self.errors,最终的)   MemoryError

3 个答案:

答案 0 :(得分:1)

我在深度学习项目中遇到了同样的问题。我可以建议2种选择:

  1. 编辑:您应该考虑通过将数据转换为带有一些序列化程序库的小型二进制文件来批量处理(此blog可以帮助选择库)< / del>。由于您要处理文本数据,因此可以将数据分成有意义的小段(例如,假设数据包含不同类型的新闻,则可以将其作为政治,体育,健康等信息作为不同的文本文件(批处理)进行吐出)。然后,您可以逐批读取创建的文本文件,并使模型适合训练。由于我对您的文本数据一无所知,因此请尝试一下!我刚刚删除了二进制情况,因为它是错误的解决方法。

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

顺便说一句,我使用了第二个,这是一个更快的方法;) 希望对您有所帮助。

致谢

答案 1 :(得分:0)

您实际上是亲自回答了您的问题。 文件很大,可以容纳到RAM内存中。

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

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

答案 2 :(得分:-1)

您可以通过tds库克服内置的内存限制,该库使您可以构建不受内存上限限制的或多或少的等效结构。这无助于硬件的限制,但是您将能够拥有大于2 GB的表之类的东西。

https://github.com/torch/tds