?? bppredict.asv
字號:
%BP網絡非線性分類器主程序
%本程序采用50組非線性分類數據,利用BP網絡進行訓練分類,輸入為2個神經元
%作者:梁霄
%單位:東華大學 信息科學與技術學院 控制理論與控制工程
%最后更新時間:2007.12.31 16:07
clear all;
%關閉警告消息
nntwarn off;
%隱含層神經元個數
NUMBER1=3;
NUMBER2=5;
%學習速率
lr=0.04;
%誤差精度
err_goal=0.005;
%最大迭代次數
max_epoch=20000;
%訓練數據集數量
TRAINNUM=20;
%隨機樣本數目
SamplesNum=50;
%正弦分類面幅值
A=2;
%正弦分類面周期
xp=2;
%正弦分類面初相角
phai=0;
%樣本水平范圍
CrX=5;
%樣本垂直范圍
CrY=2;
%類別1結果允許下限
CLASS_1_INF=0.7;
%類別2結果允許上限
CLASS_2_SUP=0.3;
%創建隨機樣本點
X1=GetPoints(SamplesNum,A,xp,phai,CrX,CrY);
%分離輸入數據集
X=zeros(2,SamplesNum);
X(1,:)=X1(1,:);
X(2,:)=X1(2,:);
%分離輸出數據集
T=zeros(1,SamplesNum);
T=X1(3,:);
%輸出每一類的樣本數目
samples_1=0;
samples_2=0;
for i=1:samplesNum,
if(T(i)==0.95)
samples_1=samples_1+1;
end
if(T(i)==0.05)
samples
%選擇訓練數據集
X_test=[X(:,linspace(1,TRAINNUM,TRAINNUM))];
T_test=[T(:,linspace(1,TRAINNUM,TRAINNUM))];
%取得輸入神經元的個數M
[M,N]=size(X_test);
%每個輸入神經元輸入數據的最大值和最小值
Xr=[zeros(1,M);ones(1,M)]';
%生成BP網絡
[Wij,b1,Wjk,b2,Wkl,b3]=initff(Xr,NUMBER1,'tansig',NUMBER2,'tansig',1,'tansig');
Wijs=Wij;b1s=b1;
Wjks=Wjk;b2s=b2;
Wkls=Wkl;b3s=b3;
%計時開始
tic
%開始循環
for epoch=1:max_epoch
%求出隱含層1神經元的輸出
Oj=tansig(Wij*X_test,b1);
%求出隱含層2神經元的輸出
Ok=tansig(Wjk*Oj,b2);
%求出輸出層神經元輸出
Ol=tansig(Wkl*Ok,b3);
%計算輸出誤差
E=T_test-Ol;
%計算輸出層的delta
deltal=deltalin(Ol,E);
%計算隱含層2的delta
deltak=deltatan(Ok,deltal,Wkl);
%計算隱含層1的delta
deltaj=deltatan(Oj,deltak,Wjk);
%調整輸出層加權系數
[dWkl,db3]=learnbp(Ok,deltal,lr);
Wkl=Wkl+dWkl;b3=b3+db3;
%調整隱含層2加權系數
[dWjk,db2]=learnbp(Oj,deltak,lr);
Wjk=Wjk+dWjk;b2=b2+db2;
%調整隱含層1加權系數
[dWij,db1]=learnbp(X_test,deltaj,lr);
Wij=Wij+dWij;b1=b1+db1;
%計算網絡權值修正后的誤差平方和
SSE=sumsqr(T_test-tansig(Wkl*tansig(Wjk*tansig(Wij*X_test,b1),b2),b3));
%如果滿足誤差條件就停止循環
if(SSE<err_goal)
break;
end
end
%計時結束
toc
%顯示迭代次數
epoch
%使用全部的數據作測試,包括訓練數據和測試數據
X_test=X;
T_test=T;
[tmp1,tmp2,Out_test,Out_E,Out_SSE]=PredictNet2(Wij,b1,Wjk,b2,Wkl,b3,X_test,T_test);
%繪圖部分
figure(1);
%首先作出分類面曲線
coord_X=linspace(0,CrX,100);
coord_Y=A .* sin(2 * pi .* coord_X / xp + phai);
plot(coord_X,coord_Y);
hold on;
%計算分到兩類正確的數目
correct_1=0;
correct_2=0;
%依次作出每個點的分類結果,如果分類為1則為藍色,為0則為紅色。
for i=1:SamplesNum,
if((Out_test(i)>=CLASS_1_INF)&&(T(i)==0.95))
plot(X(1,i),X(2,i),'b*');
correct_1=correct_1+1;
end
if((Out_test(i)<=CLASS_2_SUP)&&(T(i)==0.05))
plot(X(1,i),X(2,i),'rv');
correct_2=correct_2+1;
end
hold on;
end
%輸出正確分類數
correct_1
correct_2
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -