после прочтения некоторых статей о нейронной сети (обратное распространение) я пытаюсь написать простую нейронную сеть самостоятельно .
Я решил, что нейронная сеть XOR, моя проблема в том, когда я пытаюсь обучить сеть, если я использую только один пример для обучения сети, скажем 1,1,0 (как input1, input2, targetOutput). после 500 поездов + - ответ сети 0,05. но если я пробую более одного примера (скажем, 2 разных или все 4 возможности), сеть стремится к 0,5 на выходе: ( Я искал в Google свои ошибки, но безрезультатно: S я постараюсь дать как можно больше подробностей, чтобы найти, что не так:
-ive пробовали сети с 2,2,1 и 2,4,1 (inputlayer, hiddenlayer, outputlayer).
-вывод для каждого нейронного канала, определенного:
double input = 0.0;
for (int n = 0; n < layers[i].Count; n++)
input += layers[i][n].Output * weights[n];
, в то время как 'i' - текущий уровень, а вес - все веса из предыдущего слоя.
- ошибка последнего слоя (выходного слоя) определяется следующим образом:
value*(1-value)*(targetvalue-value);
, в то время как «значение» - это нейронный вывод, а «targetvalue» - целевой вывод для текущего нейронного канала.
- ошибка для других нейронных сетей определяется следующим образом:
foreach neural in the nextlayer
sum+=neural.value*currentneural.weights[neural];
- все веса в сети адаптируются по этой формуле (вес t от neural -> neural 2)
weight+=LearnRate*neural.myvalue*neural2.error;
, в то время как LearnRate - это скорость обучения новых пользователей (определенная в моей сети 0,25). - смещение для каждой нейронной сети определяется следующим образом:
bias+=LearnRate*neural.myerror*neural.Bias;
bias is const value = 1 .
это почти все, что я могу подробно описать, как я уже сказал, цель вывода - 0.5 с различными примерами обучения: (
большое спасибо за вашу помощь ^ _ ^.