2017-03-03 58 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

我檢查它應該工作。注意發電機應該在某個時刻停下來。 –