после прочтения некоторых статей о нейронной сети (обратное распространение) я пытаюсь написать простую нейронную сеть самостоятельно.
Я решил, что нейронная сеть XOR, моя проблема в том, когда я пытаюсь обучить сетьЕсли я использую только один пример для обучения сети, скажем, 1,1,0 (как input1, input2, targetOutput).после 500 поездов + - ответ сети 0.05.но если я пытаюсь использовать более одного примера (скажем, 2 разных или все 4 возможности), сеть нацеливается на вывод 0,5 :( Я искал в Google свои ошибки, но безрезультатно: постараюсь дать как можно больше подробностейчтобы понять, что не так:
- пять проверенных сетей с 2,2,1 и 2,4,1 (входной слой, скрытый слой, выходной слой).
- выход для каждой нейронной сети, определенной:
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);
, в то время как 'value' - это нейронный выход, а 'targetvalue' - это целевой выход для текущей нейронной сети.
- ошибка для других нейронных элементов определяется следующим образом:
foreach neural in the nextlayer
sum+=neural.value*currentneural.weights[neural];
- все веса в сети адаптируются по этой формуле (вес от нейронного -> нейронный 2)
weight+=LearnRate*neural.myvalue*neural2.error;
, в то время как LearnRate - это скорость обучения nework (определенная в моей сети 0,25). -смещение для каждой нервной системы определяется как:
bias+=LearnRate*neural.myerror*neural.Bias;
смещение - это постоянное значение = 1.
, что почти все, что я могу детализировать, как я уже сказал, цель на выходе - 0,5 с различными примерами обучения: (
большое спасибоза вашу помощь ^ _ ^.