Алгоритм обратного распространения нейронной сети: обучение XOR - PullRequest
1 голос
/ 22 января 2012
 c=0;
 wih = .1*ones(nh,ni+1);
 who = .1*ones(no,nh+1);

 while(c<3000)
     c=c+1;
     for i = 1:length(x(1,:))


        for j = 1:nh
            netj(j) = wih(j,1:end-1)*double(x(:,i))+wih(j,end)*1;
            outj(j) = 1./(1+exp(-1*netj(j)));
        end

% hidden to output layer

        for k = 1:no

            netk(k) = who(k,1:end-1)*outj+who(k,end)*1;
            outk(k) = 1./(1+exp(-1*netk(k)));
            delk(k) = outk(k)*(1-outk(k))*(t(k,i)-outk(k));

        end

% backpropagation
        for j = 1:nh
            s=0;
            for k = 1:no
                s = s+who(k,j)*delk(k);
            end

            delj(j) = outj(j)*(1-outj(j))*s; 

            s=0;
        end


        for k = 1:no
            for l = 1:nh
                who(k,l)=who(k,l)+.5*delk(k)*outj(l);
            end
            who(k,l+1)=who(k,l+1)+1*delk(k)*1;
        end

        for j = 1:nh
            for ii = 1:ni
                wih(j,ii)=wih(j,ii)+.5*delj(j)*double(x(ii,i));
            end
            wih(j,ii+1)=wih(j,ii+1)+1*delj(j)*1;

        end



    end

end

Это реализует нейронную сеть обратного распространения.x - это вход, t - желаемый выход, ni, nh, no количество входных, скрытых и выходных нейронных слоев.Я проверяю это для различных функций, таких как AND, OR, он отлично работает для них.Но XOR не работает.

Обучение x = [0 0 1 1; 0 1 0 1] Обучение t = [0 1 1 0]

who = матрица весов из скрытого в выходной слой

wih = матрица весов извход в скрытый слой

Можете ли вы помочь?

1 Ответ

3 голосов
/ 22 января 2012

Разница между XOR и всеми другими описанными вами функциями заключается в том, что функция XOR не линейно разделима.

Может случиться так, что вы используете линейные единицы (функции линейной активации) вместо сигмоидальных единиц (функция нелинейной активации). Кроме того, вы уверены, что у вас есть скрытый слой?

Пожалуйста, опубликуйте свою топологию сети (кратко) и тип устройства на каждом слое.

...