2

画像を分類するためにニューラル ネットワークをトレーニングしていますが、1 回の反復を完了するのに時間がかかりすぎます...約 5 分で、まだ完了していません。Encog 3.1 を使用しています。私のコードに何か問題がありますか?

BasicNetwork network = new BasicNetwork();
        network.addLayer(new BasicLayer(null,true,5625));
        network.addLayer(new BasicLayer(new ActivationSigmoid(),true,(intIdealCount+5625)/2));
        network.addLayer(new BasicLayer(new ActivationSigmoid(),true,intIdealCount));
        network.getStructure().finalizeStructure();

ここに私のトレーニングコードがあります:

final ResilientPropagation train = new ResilientPropagation(network, trainingSet);

        int epoch = 1;

        do {
            train.iteration();
            System.out.println("Epoch #" + epoch + " Error:" + train.getError());
            epoch++;
        } while(train.getError() > 0.01);

任意の応答をいただければ幸いです。ありがとうございました。

4

1 に答える 1

4

コードは問題ないように見えますが、データによってはトレーニングが任意に長くなる可能性があります。ネットワークのサイズから推測できるように、画像を処理していることがわかります。画像が多数ある場合は、最も効率的な実装でさえ、永遠に時間がかかります。Encog は非常に優れたコードです。デフォルトでは、利用可能なすべてのコアで動作しますが、現時点では FANN が ANN の最速のライブラリのようです。

~10 個の出力ニューロンがあると仮定すると、~5000 個の入力ニューロンがあり、~2500 個の非表示ニューロンがあります。したがって、ネットワークには (5000+1)*2500 + (2500+1)*10 の重み (約 12,500,000) があります。ここで、トレーニング セットに N 個の画像があると仮定すると、1 つのエポックで 12,500,000 * N 値の計算 (および更新) が必要になります。したがって、画像が 200 個までしかない場合でも、2,500,000,000 回の更新が計算されます。

少なくとも 3 つの方法があります。

  • 最も効率的なライブラリの 1 つである FANN ライブラリを試してください。
  • たとえばPCAを使用して画像の次元を減らします(結果として、ネットワークのサイズを減らします)
  • 本当に 2500 個の隠しノードが必要ですか? かなり多いです
于 2013-11-10T09:25:08.673 に答える