多くの質問と例を調査しましたが、RPROP NN の何が問題なのかわかりません。また、Encog を使用するのは初めてなので、何か間違っているのではないかと思っています。
画像 (50x50) を供給し、それをグレースケールに変換し、入力 double[][] とターゲット double[][] をネットワークに供給することで、ネットワークを訓練して猫を認識しようとしています。エラーが常に 4.0 であることに気付いたので、トレーニングの反復ごとに dumpWeights() を実行して、何が起こっているかを確認しました。重みが常にゼロであることに気付きました。次に、基本に戻って、正しいことを行っているかどうかを確認したので、XOR 問題用に修正しました。
//////////First created the network:
BasicNetwork network = new BasicNetwork();
network.addLayer(new BasicLayer(null, true, 2));
network.addLayer(new BasicLayer(new ActivationBiPolar(), true, 2));
network.addLayer(new BasicLayer(new ActivationBiPolar(), false, 1));
network.getStructure().finalizeStructure();
network.reset();
//////Then created my data set and target vector (ideal vector) and fed it to a new RPROP training class:
final double targetVector[][] = { { -1 }, { 1.0 }, { 1.0 }, { -1 } };
final double inputData[][] = { { -1, -1 }, { 1.0, -1 },{ -1, 1.0 }, { 1.0, 1.0 } };
MLDataSet trainingSet = new BasicMLDataSet(inputData, targetVector);
final ResilientPropagation train = new ResilientPropagation(network, trainingSet);
///////train network
int epoch = 1;
do{
train.iteration();
System.out.println("Epoch #" + epoch + " Error : " + train.getError()) ;
epoch++;
System.out.println(network.dumpWeights());
}while(train.getError() > 0.01) ;
train.finishTraining();
System.out.println("End of training");
次の出力が得られます。network.dumpWeights() メソッドの結果として 0.0 の行に注目してください。
エポック #132636 エラー: 2.0 0,0,0,0,0,0,0,0,0 エポック #132637 エラー: 2.0 0,0,0,0,0,0,0,0,0 エポック #132638 エラー: 2.0 0,0,0,0,0,0,0,0,0 エポック #132639 エラー: 2.0 0,0,0,0,0,0,0,0,0 エポック #132640 エラー: 2.0
... 等々。
ここで私が間違っていることがわかりますか?また、XORHelloWorld.java の例が実装されているので、2-3-1 アーキテクチャも試しました。
どんな助けでも大歓迎です。