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
=權重矩陣從輸入到隱層
你能幫忙嗎?
我建議你編輯你的問題,以便它是負責任的。它沒有包含任何細節:「我在MATLAB中實現了反向傳播算法」 - 也許你應該先發布它。 –
我已添加代碼,請告知我是否需要更多解釋。我現在應該期待你們的一些反饋 –
你將權重初始化爲相同的值。你確定這沒關係嗎?我不確定,但我認爲這是一個糟糕的主意,可能是網絡受到這種對稱性的制約。 – Nabla