Я строю нейронную сеть, используя C ++ только с одним скрытым слоем. Моя нейронная сеть принимает 2 входа и производит 1 выход с узлами смещения в первых двух слоях. Когда я тренирую сеть только с одним типом данных (скажем, вход = (0,0), желаемый результат = 1), сеть тренируется хорошо. Но когда я тренируюсь с двумя типами (скажем, (0,0) -> 1, (1,0) -> 0), сеть работает очень плохо. Что я сделал, так это зациклился
Вот выдержка из кода
vector<double> input0, output0;
input0.push_back(0);
input0.push_back(0);
output0.push_back(1);
vector<double> input1, output1;
input1.push_back(1);
input1.push_back(0);
output1.push_back(0);
for(int i = 0; i < 2000; i++){
n->setUserInput(input0);
n->setIdealOutputs(output0);
n->feedForward();
n->backPropagate();
n->setUserInput(input1);
n->setIdealOutputs(output1);
n->feedForward();
n->backPropagate();
}
Сеть работает хорошо, когда я просто выполняю один из двух фрагментов в цикле. Удивительно, но если у меня есть два типа ввода, оба имеют одинаковый выход, сеть работает хорошо. Это озадачивает меня. Что-то не так с тем, как я тренирую сеть с двумя типами данных?