深い学習モデルでは、データをバッチで読み込む必要があります。すべてのエポック(すべてのデータに対して完全な反復)ごとに、すべての行を一度渡す必要がありますが、データがランダムな順序でアルゴリズムに供給されることが重要です。私のデータセットは大きすぎて、それを完全にメモリに読み込めません。これは可変長のシーケンスデータです。入力フォーマットは、他のスクリプトが出力するクラスタからのダンプなので変更できます。現在、行ごとにいくつかのメタ情報があり、シーケンスは ';'で分割されます。ランダムなチャンクをテキストファイルから読み取る
私の現在の解決策は、すべての行番号をシャッフルし、4つの部分にチャンクし、ファイルを読み取り、チャンク行番号に一致する行を解析するジェネレータです。何も残らなくなるまでバッチサイズのシーケンスを生成し、次の行番号のチャンクを解析します。それは機能しますが、よりよい解決策があるように感じます。誰がより良いワークフローを持っていますか?これは私が定期的に実行する問題です。問題は、すべてのチャンク、すべてのエポックごとにファイルを完全にスキャンしていることです。私はそれをちょうど4つのチャンクで動作させることができますが、30回のエポックは120倍の大きなファイルを読み込みます。
*「それはデータがランダムに供給されていることが重要ですアルゴリズムへの順序 "*シーケンシャルディスクI/O APIは、このようなクレイジーのために設計されたものではありません。 - "深い学習"について何も知らない人に署名しました –
私は 'set(file_obj)'でファイルのセットを作るでしょう。次に、random要素の正しい数を得るために 'random.sample'を使います。 – zondo
@ zondoはファイル内容全体をメモリにロードしませんか? –