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進行比較...