BP演算法解決XOR異或問題MATLAB版

2021-08-07 22:13:50 字數 1974 閱讀 7066

from: 

%%

%用神經網路解決異或問題

clear

clcclose

ms=4;%設定4個樣本

a=[0 0;0 1;1 0;1 1];%設定輸入向量

y=[0,1,1,0];%設定輸出向量

n=2;%輸入量的個數

m=3;%隱層量的個數

k=1;%輸出層的個數

w=rand(n,m);%為輸入層到隱層的權值賦初值

v=rand(m,k);%為隱層到輸出層的權值賦權值

yyuzhi=rand(1,m);%為輸入層到隱層的閾值賦初值

scyuzhi=rand(1,1);%為隱層到輸出層的閾值賦權值

maxcount=10000;%設定最大的計數

precision=0.0001;%設定精度

speed=0.2;%設定訓練率

count=1;%設定計數器的初始值

while(count<=maxcount)

cc=1;%cc為第幾個樣本

%樣本數少於ms=4時執行

while(cc<=ms)

%計算第cc個樣本的輸出層的期望輸出

for l=1:k

o(l)=y(cc);

end%獲得第cc個樣本的輸入的向量

for i=1:n

x(i)=a(cc,i);

end%%

%計算隱層的輸入輸出

%b(j)為隱層的輸出,轉移函式為logsig函式

for j=1:m

s=0;

for i=1:n

s=s+w(i,j)*x(i);

ends=s-yyuzhi(j);

b(j)=1/(1+(exp(-s)));

end%%

%計算輸出層的輸入輸出

%b(j)為輸出層的輸入,c為輸出層的輸出,轉移函式為logsig函式

%for t=1:k 此處k為1,所以迴圈不寫

for t=1:k

ll=0;

for j=1:m

ll=ll+v(j,t)*b(j);

endll=ll-scyuzhi(t);

end%c(t)=l/(1+exp(-l))引文k為1,所以直接用下式

% c=l/(1+exp(-ll));

if ll<0

c=0;

else

c=1;

end%%

%計算誤差

errort=(1/2)*((o(l)-c)^2);

errortt(cc)=errort;

%計算輸出層各單元的一般化誤差

scyiban=(o(l)-c)*c*(1-c);

%計算隱層的一般化誤差

for j=1:m

e(j)=scyiban*v(j)*b(j)*(1-b(j));

end%修正隱層到輸出層連線權值和輸出層各閾值

for j=1:m

v(j)=v(j)+speed*scyiban*b(j);

endscyuzhi=scyuzhi-speed*scyiban;

%修正輸入層到中間層的權值和閾值

for i=1:n

for j=1:m

w(i,j)=w(i,j)+speed*e(j)*x(i);

endend

for j=1:m

yyuzhi(j)=yyuzhi(j)-speed*e(j);

endcc=cc+1;

end%%

%計算count一次後的誤差

tmp=0;

for i=1:ms

tmp=tmp+errortt(i)*errortt(i);

endtmp=tmp/ms;

error(count)=sqrt(tmp);

%判斷是否小於誤差精度

if(error(count)

xor異或演算法學習

異或 xor 是乙個數 算符。它應用於邏輯運算。計算機符號為 xor 其運算法則為 a b a b a b 如果a b兩個值不相同,則異或結果為1。如果a b兩個值相同,異或結果為0。異或也叫半加運算,其運算法則相當於不帶進製的二進位制加法 二進位制下用1表示真,0表示假,則異或的運算法則為 0 0...

BP神經網路 解決異或問題

import numpy as np import matplotlib.pyplot as plt 輸入資料 4,3 x np.array 1,0,0 1,0,1 1,1,0 1,1,1 標籤y np.array 0,1,1,0 權值初始化,1行3列,取值範圍 1到1 v np.random.ra...

線性神經網路 解決異或問題

日常三大包 import numpy as np import pandas as pd import matplotlib.pyplot as plt多想想upadte函式的原理,這裡是先隨機乙個權重w,然後w的置換與x相乘去,得到的是乙個列 w1x1 w2x2 w3x3的形式 然後其與y進行比較...