Я исследовал множество вопросов и примеров, но я не могу понять, что не так с моей RPROP NN. Это также первый раз, когда я использую Encog, поэтому мне интересно, не так ли, что я делаю неправильно.Java - Encog 3.2 - сеть RPROP не обновляет весы
Я пытаюсь обучить сеть распознавать кошку, загружая ее изображения (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 в результате сети. 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.
Любая помощь была бы принята с благодарностью.
Я просто попытался изменить набор данных и цели, заменяя -1 на 0.0, и изменить функцию активации на ActivationSigmoid, и, похоже, она работает нормально. Выход после изменения: Epoch # 48 Ошибка: +0,007620154423525455 +7,960025653965789, -14,182680838427633, -1,2611584281744572, -1.2781030810307181,10.50534716500236,9.690907558129927, -6.933186134247863,1.3562102936861975,1.6115414799461512, -2.8203649806273847,6.8557107101634545, -4.423294726521557,2.52133147494805 Конец обучения – wFateem