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은 작동하지 않습니다.신경망의 역 전파 알고리즘 : XOR 훈련
교육 x = [0 0 1 1; 0 1 0 1]
교육 t = [0 1 1 0]
who
= 가중치 행렬
wih
= 가중치 행렬 출력 층에 숨겨진에서?
나는 답을 얻을 수 있도록 질문을 편집하는 것이 좋습니다. 여기에는 "MATLAB에서 역 전파 알고리즘을 구현했습니다"라는 내용이 포함되어 있지 않습니다. 아마도 게시하여 시작해야합니다. –
코드를 추가했습니다. 자세한 설명이 필요한 경우 알려 주시기 바랍니다. 나는 너희들로부터 약간의 피드백을 기대해야한다. –
가중치를 모두 같은 값으로 초기화한다. 괜찮습니까? 확실하지는 않지만 이것이 나쁜 생각 인 것 같습니다. 네트워크가 이와 같이 대칭에 의해 제약을받을 수 있습니다. – Nabla