2012-01-22 2 views
0
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 = 가중치 행렬 출력 층에 숨겨진에서?

+0

나는 답을 얻을 수 있도록 질문을 편집하는 것이 좋습니다. 여기에는 "MATLAB에서 역 전파 알고리즘을 구현했습니다"라는 내용이 포함되어 있지 않습니다. 아마도 게시하여 시작해야합니다. –

+0

코드를 추가했습니다. 자세한 설명이 필요한 경우 알려 주시기 바랍니다. 나는 너희들로부터 약간의 피드백을 기대해야한다. –

+1

가중치를 모두 같은 값으로 초기화한다. 괜찮습니까? 확실하지는 않지만 이것이 나쁜 생각 인 것 같습니다. 네트워크가 이와 같이 대칭에 의해 제약을받을 수 있습니다. – Nabla

답변

1

XOR과 다른 모든 함수의 차이점은 XOR 함수가 이 아니고이 선형으로 분리 가능하다는 것입니다.

Sigmoidal 단위 (선형 활성화 함수) 대신 선형 단위 (선형 활성화 함수)를 사용하고 있습니다. 또한 숨겨진 레이어가 있는지 확실합니까?

네트워크 토폴로지 (간략하게)와 각 레이어의 단위 유형을 게시하십시오.

+0

예, 숨겨진 레이어가 있습니다. 하나는 숨겨진 레이어이고 하나는 출력 레이어이고, 저는 Sigmoid 활성화를 사용하고 있으며 숨겨진 레이어의 뉴런 수를 변경할 수 있습니다. 입력 레이어 크기 2, 출력은 1이고 XOR의 경우 숨겨진 레이어에서 1입니다. 다른 수의 뉴런을 시도하고 있지만 아무도 작동하지 않습니다. 나는이 코드를 포함시킬 것이라고 생각한다. –