5

私は、ニューラルネットワークを訓練するために.NETフレームワークを使用してきました。私のデータセットは非常に多く、多数の入力があります。メモリ内のすべてのトレーニングセットをロードせずにEncogニューラルネットワークをトレーニングする方法はありますか?

私が使用していた古いフレームワークに問題があり、Encogがより豊かになり、追加の機能を提供するため、Encogに切り替えることにしました。

私の問題は、一度にすべてのトレーニングデータを2D配列に読み込むことです。非常に大きなデータセットがあるので、これは私には合いません。私はこれを回避しようとしましたが、他の質問もチェックしました(例えば、this one)が良い答えを見つけることができませんでした。

SQLNeuralDataSetとストリーミング操作をサポートする他の実装を試してみましたが、最終的に(MemoryDataLoaderを使用して)データをメモリにロードするように見えますが、これで問題は解決しません。

一度に1つのアイテムをネットワークにロード(およびトレーニング)する方法はありますか?または、このオプションはEncogでは利用できませんか?

おかげ

EDIT

私は私のニーズに合わせて、ソースコードをコピーして修正することになりました。基本的に、それはすべての文書によるとされ、GradientWorkerProcess(IMLDataPair pair)にダウンしています:

プロセス1つのトレーニングセット要素。

答えて

1

Encogのデータソースにはsource codeがあります。多くのオプションがあります。例えば、Buffer/BufferedMLDataSet.csを見てください:

/// This class is not memory based, so very long files can be used, without 
/// running out of memory. This dataset uses a Encog binary training file as a 
/// buffer. 
+0

私は 'BufferedMLDataSet.cs'を試みたが、それは本当に私の問題を解決しませんでした。基本的に私は入力と出力を持つCSVファイルを構築するために私のデータセットをループしなければなりませんでした。そして、 'EncogUtility.ConvertCSV2Binary'を使ってバイナリにCSVファイルを変換し、それをtrainingSetにロードします:' var trainingSet = new BufferedMLDataSet(binaryFile) 'を呼び出し、trainingSetをBackPropagationオブジェクトに渡します。私がトレーニングを1つずつロードすることができれば、はるかに良いでしょう。 – kristoffz

関連する問題