我正在使用keras在非常大的文本数据集上创建神经网络。为了构建模型并确保一切正常,我将一小部分数据读入内存,并使用内置的keras'Tokenizer'来执行必要的预处理工作,包括将每个单词映射到一个令牌。然后,我使用model.fit()。
现在,我想扩展到完整数据集,并且没有空间将所有数据读入内存。所以,我想创建一个生成器函数来顺序从磁盘读取数据,并使用model.fit_generator()。但是,如果我这样做,那么我会在每批数据上单独调整Tokenizer对象,为每个批次提供不同的单词到令牌映射。有没有办法解决?有什么办法可以用keras连续构建一个令牌字典吗?
答案 0 :(得分:3)
所以基本上你可以用以下方式定义文本生成器并将其提供给fit_on_text
方法:
假设您有texts_generator
部分从磁盘读取数据并返回可迭代的文本集合,您可以定义:
def text_generator(texts_generator):
for texts in texts_generator:
for text in texts:
yield text
请注意,在从磁盘读取整个数据后,应使此发生器停止 - 有可能使您更改要在model.fit_generator
中使用的原始生成器
从1开始生成生成器后,您可以通过以下方式应用tokenizer.fit_on_text
方法:
tokenizer.fit_on_text(text_generator)