1

私はVB.NETでバックプロパゲーションクラスを作成しました-それはうまく機能します-そして私はそれをC#人工知能プロジェクトで使用しています。

しかし、私は自宅にAMD Phenom X3を、学校にInteli5を持っています。私のニューラルネットワークはマルチスレッドではありません。

そのバックプロパゲーションクラスをマルチスレッドアルゴリズムに変換するにはどうすればよいですか?またはその中でGPGPUプログラミングを使用する方法は?または、マルチスレッドのバックプロパゲーションニューラルネットワークを備えたサードパーティのライブラリを使用する必要がありますか?

4

2 に答える 2

3

JeffHeatonは、バックプロパゲーションの代わりにレジリエントプロパゲーション(RPROP)を使用することを推奨しています。マルチスレッドRPROP(MPROP)を実行する方法の例があります。

ここですべての詳細を説明するのは難しいので、その記事を読んで、私が参照した本の関連する章を確認することをお勧めします。もちろん、これは並行プログラミングに精通していることを前提としています。

アップデート:

弾力性のある伝播は、通常、かなりの要因で逆伝播を上回ります。さらに、RPROPには設定する必要のあるパラメーターはありません。バックプロパゲーションでは、学習率と運動量の値を指定する必要があります。バックプロパゲーションの最適な学習率と運動量の値を見つけるのは難しい場合があります。これは、回復力のある伝播では必要ありません。(出典:Encog Machine Learning

于 2012-01-05T22:22:20.807 に答える
0

RPROPバッチ処理用に複数のスレッドを実装しようとしましたが、単一のスレッドを使用するよりも常に遅いようでした。ループレベル「#pragmaompparallel」で、別々のスレッドでエラー、勾配、および重みを計算することによって、別々に実装しようとしました。私の解釈では、各スレッドで実行される計算は小さすぎて、スレッドの切り替えと結果の同期(ミューテックス)で実行される計算の結果にはならないようです。何か間違ったことをしたのではないかと思います。私の結論は、複数のニューロンネットワークを別々のスレッドで同時に処理しながら、RPROPシングルスレッドを実行する方が賢明だということです。ほとんどの実装は通常、複数の相互接続されたNNを意味するため、それは理にかなっています。

于 2013-12-28T21:07:14.337 に答える