C ++ нейронная сеть для нескольких входов - PullRequest
0 голосов
/ 04 сентября 2018

Я строю нейронную сеть, используя C ++ только с одним скрытым слоем. Моя нейронная сеть принимает 2 входа и производит 1 выход с узлами смещения в первых двух слоях. Когда я тренирую сеть только с одним типом данных (скажем, вход = (0,0), желаемый результат = 1), сеть тренируется хорошо. Но когда я тренируюсь с двумя типами (скажем, (0,0) -> 1, (1,0) -> 0), сеть работает очень плохо. Что я сделал, так это зациклился

  • установить желаемый вход = (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();
}

Сеть работает хорошо, когда я просто выполняю один из двух фрагментов в цикле. Удивительно, но если у меня есть два типа ввода, оба имеют одинаковый выход, сеть работает хорошо. Это озадачивает меня. Что-то не так с тем, как я тренирую сеть с двумя типами данных?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...