2017-03-03 55 views
4

我在使用keras的非常大的文本数据集上创建神经网络。为了构建模型并确保一切正常,我将一小部分数据读入内存,并使用内置的keras'Tokenizer'来执行必要的预处理,包括将每个单词映射到令牌。然后,我使用model.fit()。Keras:Tokenizer with fit_generator()on text data

现在,我想扩展到完整的数据集,并没有空间将所有数据读入内存。所以,我想制作一个生成器函数来从磁盘顺序读取数据,并使用model.fit_generator()。但是,如果我这样做,那么我会在每批数据上分别安装一个Tokenizer对象,为每批提供不同的字对标记映射。有没有办法解决?有什么方法可以使用keras连续构建令牌字典吗?

+1

1)显示目前你在做什么一些代码。 2)为什么不分离预处理任务,将映射对象保存在硬盘上,然后在批生成中进行转换? –

回答

1

所以基本上你可以定义一个文本生成和饲料它fit_on_text方法以下列方式:

  1. 假设你有texts_generator这是从磁盘读取部分数据并返回文本的迭代集合你可以定义:

    def text_generator(texts_generator): 
        for texts in texts_generator: 
         for text in texts: 
          yield text 
    

    请小心,你应该阅读整个磁盘的数据后作出这一发电机停止 - 什么能可能让你改变你想要原来的发电机在model.fit_generator

  2. 使用一旦你从1发电机,你可以简单地通过应用tokenizer.fit_on_text方法:

    tokenizer.fit_on_text(text_generator) 
    
+0

谢谢,我没有想到将生成器传递给'fit_on_texts'方法本身。我会试试这个,让你知道它是如何工作的。 –

+0

我检查它应该工作。注意发电机应该在某个时刻停下来。 –