Я изучил множество вопросов и примеров, но не могу понять, что не так с моим RPROP NN. Я также впервые использую Encog, поэтому мне интересно, не делаю ли я что-то неправильно.
Я пытаюсь научить сеть распознавать кошку, передавая ей изображения (50x50), затем преобразовывая ее в оттенки серого и передавая сети входной двойной [][] вместе с целевым двойным [][]. Я заметил, что ошибка постоянно равна 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");
Я получаю следующий вывод, обратите внимание на строки 0.0 в результате метода network.dumpWeights():
Эпоха #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
... и так далее.
Что-нибудь очевидное вы можете увидеть, что я делаю неправильно здесь? Я также попробовал архитектуру 2-3-1, реализованную в примере XORHelloWorld.java.
Любая помощь будет принята с благодарностью.