ディスクからバッチでデータをトレーニングする方法は?


8

画像分類のための畳み込みニューラルネットワークに取り組んでいます。トレーニングデータセットが大きすぎて自分のコンピューターのメモリ(4GB)にロードできないため、クラスのバランスをとるためにいくつかの拡張を試す必要もあります。

使用していkerasます。私は多くの例を調べましたが、私の問題の解決策は見つかりませんでした。model.fit「バッチ処理」を行う関数またはジェネレーターを渡すことで、呼び出しのパラメーターを置き換えることを考えています。この関数は、ディスクからインポートして拡張を適用するように設計します。

それを実装する方法がわかりません。助言がありますか?


これらのトレイン機能と対応するトレインラベルをディスクに保存する方法を教えてください。次回は同じものを計算する必要がなくなりますか?
Supreeth Ys 2018

回答:


8

画像の分類に取り組んでおり、データ拡張を実装したい場合は、2つを組み合わせて、強力な 'ImageDataGenerator`クラスを使用してフォルダーからバッチを直接ロードできます。

見ていスチールハーフメッシュマスクのマニュアルを!

そのリンクから例をコピーして貼り付けることはしませんが、実行する手順の概要を説明できます。

  1. ジェネレータクラスを作成します。 data_gen = ImageDataGenerator()

  2. オンザフライで拡張を実行したい場合は、クラスの作成時に指定できます。 data_gen = ImageDataGenerator(samplewise_center=True, ...)

  3. たとえば、feature_wise正規化(サンプルごとではない)など、データセットに関する統計が必要な拡張プロセスを使用する場合は、データの一部を表示してジェネレータを準備する必要がありますdata_gen.fit(training_data)。このfit方法は、平均値や標準偏差などを事前に計算するだけで、後で正規化に使用されます。

  4. ジェネレーターはモデルのfit_generatorメソッドに入り、ジェネレーターのメソッドを呼び出しますflow_from_directory

    model.fit_generator(training_data=data_gen.flow_from_directory('/path/to/folder/'), ...)

検証データにImageDataGeneratorを使用して別のジェネレーターを作成することもできます。その場合、拡張を適用しないでください。これにより、検証テストが実際のデータで実行され、モデルのパフォーマンスを正確に把握できます。

いずれにせよ、これらのジェネレーターは理論的には永久に実行され、フォルダーからバッチを生成します。したがって、Kerasからのコールバック関数を使用して、特定の基準が満たされたときに停止することをお勧めします。EarlyStoppingクラスのドキュメントを参照してください。これを手動で行うこともできますが、Kerasを使用すると非常に簡単になります。

きめ細かな制御が必要な場合は、上記のすべてを手動で行い、ディスクから1つのバッチに対して十分なサンプルをロードし、いくつかの拡張を実行してから、model.train_on_batch()メソッドを実行します。詳細を知りたい場合は、まずKerasの方法を学び、次に必要に応じてTensorflowを組み合わせた独自の詳細モデルに進むのが最善です。2つは非常にうまく一緒に使用できます!


第3ステップがわかりませんでした。3番目のステップで、データセット全体またはデータセットの一部のデータをtraining_dataにする必要がありますか?
Junaid

@Junaid-データの一部である可能性があります。ただし、トレーニング中にデータセット全体に使用される平均などの妥当な値を計算するには十分である必要があります。私はここでのポイント3に少しより多くの情報を追加しているの例へのリンクflow_from_directory方法
n1k31t4
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.