2012-01-22 54 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,或者,它適用於這些。但XOR不起作用。神經網絡的反向傳播算法:異或訓練

培訓x = [0 0 1 1; 0 1 0 1] 培訓t = [0 1 1 0]

who =權重矩陣從隱蔽到輸出層

wih =權重矩陣從輸入到隱層

你能幫忙嗎?

+0

我建議你編輯你的問題,以便它是負責任的。它沒有包含任何細節:「我在MATLAB中實現了反向傳播算法」 - 也許你應該先發布它。 –

+0

我已添加代碼,請告知我是否需要更多解釋。我現在應該期待你們的一些反饋 –

+1

你將權重初始化爲相同的值。你確定這沒關係嗎?我不確定,但我認爲這是一個糟糕的主意,可能是網絡受到這種對稱性的制約。 – Nabla

回答

1

XOR與所描述的所有其他功能之間的區別在於異或功能是而不是可線性分離。

可能發生的情況是您正在使用線性單位(線性激活函數)而不是S形單位(非線性激活函數)。另外,你確定你有隱藏層嗎?

請張貼您的網絡拓撲結構(簡要),以及每層的單元類型。

+0

是的,有隱藏層,一個輸入一個隱藏和一個輸出層,我使用sigmoid激活,我可以更改隱藏層中的神經元數量,輸入層維度2,輸出爲1,就像XOR一樣,隱藏層我正在嘗試不同數量的神經元,但都沒有工作。我想我會包含代碼 –