?? bp.m
字號:
clear all;
%關閉警告消息
nntwarn off;
%隱含層神經元個數
NUMBER=9;
%NUMBER2=4;
%學習速率
lr=0.04;
%誤差精度
err_goal=0.01;
%最大迭代次數
max_epoch=20000;
%訓練數據集數量
TRAINNUM=20;
%輸入數據集
X=[0.3333333 0.4266667 0.6500000 0.1080000 0.4300000 0.5880000;
0.4333333 0.4800000 0.0700000 0.2880000 0.1000000 0.2860000;
0.5666667 0.5733333 0.7500000 0.8200000 0.3600000 0.5000000;
0.3333333 0.3733333 0.6500000 0.1600000 0.5400000 0.4360000;
0.5000000 0.5866667 0.6500000 0.1240000 0.4700000 0.8200000;
0.3666667 0.4133333 0.6000000 0.0680000 0.4000000 0.2980000;
0.4000000 0.5400000 0.7000000 0.2920000 0.2600000 0.6400000;
0.9000000 0.7066667 0.6000000 0.1280000 0.3200000 0.0420000;
0.1666667 0.3133333 0.7000000 0.2080000 0.5600000 0.7480000 ;
0.4000000 0.6933333 0.7500000 0.2080000 0.0700000 0.1280000;
0.3333333 0.6266667 0.8000000 0.3240000 0.1800000 0.1244000;
0.3666667 0.6666667 0.7000000 0.2240000 0.3900000 0.5840000;
0.3000000 0.3733333 0.6500000 0.1600000 0.5400000 0.5920000;
0.5166667 0.7066667 0.6700000 0.3360000 0.0800000 0.1020800;
0.2900000 0.4133333 0.6300000 0.1400000 0.4700000 0.4209200;
0.7533333 0.8800000 0.7550000 0.0680000 0.4100000 0.4974800;
0.3766667 0.6000000 0.8050000 0.3120000 0.1900000 0.1231200;
0.5200000 0.5866667 0.6550000 0.1160000 0.5400000 0.6800800;
0.2500000 0.7400000 0.8650000 0.3240000 0.2400000 0.0419600;
0.3266667 0.4600000 0.6250000 0.1000000 0.3700000 0.5262800;
0.3433333 0.4133333 0.6800000 0.1240000 0.4100000 0.5528800;
%0.3300000 0.6266667 0.7000000 0.2400000 0.3400000 0.4741600;
0.3133333 0.4466667 0.5850000 0.0680000 0.4100000 0.2688400;
0.4266667 0.7133333 0.2800000 0.0960000 0.4800000 0.7786800;
0.7333333 0.8866667 0.7500000 0.0560000 0.4000000 0.3592000;
0.3000000 0.7066667 0.9000000 0.3320000 0.2100000 0.0388800;
0.4666667 0.6933333 0.2500000 0.0920000 0.4300000 0.9040000;
0.4666667 0.7466667 0.7000000 0.3520000 0.0700000 0.1272000;];
%輸出數據集
%T=[0.0137455;0.9636364;0.4727273;0.0050909;0.0073455;0.0108909;0.8490545;0.1663273;
%0.0138182;0.3272727;0.8001818;0.8538545;0.0032182;0.3075455;0.0057455;0.0131636;
%0.7545273;0.0055455;0.0448364;0.0132909;0.0135636;0.5631818;0.0164182;0.1688182;
%0.0150545;0.0430909;0.1098182;0.2908364;]; %輸入和輸出數據集轉置
T=[0.0126000;0.8833333;0.4333333;0.0046667;0.0067333;0.0099833;0.7783000;0.1524667;
0.0126667;0.3000000;0.7335000;0.7827000;0.0029500;0.2819167;0.0052667;0.0120667;
0.6916500;0.0050833;0.0411000;0.0121833;0.0124833;0.0150500;0.1547500;
0.0136000;0.0395000;0.1006667;0.2666000;];
%輸入和輸出數據集轉置
X=X';T=T';
%選擇訓練數據集
%X_test=[X(:,1) X(:,2) X(:,3) X(:,4) X(:,5) X(:,6) X(:,7)];
%T_test=[T(:,1) T(:,2) T(:,3) T(:,4) T(:,5) T(:,6) T(:,7)];
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,bj,Wjk,bk]=initff(Xr,NUMBER,'tansig',1,'tansig');
Wijs=Wij;bjs=bj;
Wjks=Wjk;bks=bk;
%Wkls=Wkl;b3s=b3;
%計時開始
tic
%開始循環
for epoch=1:max_epoch
%求出隱含層神經元的輸出
Oj=tansig(Wij*X_test,bj);
%求出輸出層神經元的輸出
Ok=tansig(Wjk*Oj,bk);
%計算輸出誤差
E=T_test-Ok;
%計算輸出層的delta
deltak=deltalin(Ok,E);
%計算隱含層的delta
deltaj=deltatan(Oj,deltak,Wjk);
%調整輸出層加權系數
[dWjk,dbk]=learnbp(Oj,deltak,lr);
Wjk=Wjk+dWjk;bk=bk+dbk;
%調整隱含層加權系數
[dWij,dbj]=learnbp(X_test,deltaj,lr);
Wij=Wij+dWij;bj=bj+dbj;
%計算網絡權值修正后的誤差平方和
%如果滿足誤差條件就停止循環
if(SSE<err_goal)
break;
end
end
%計時結束
toc
%顯示迭代次數
epoch
%使用全部的數據作測試,包括訓練數據和測試數據
%X_test=[X(:,linspace(TRAINNUM+1,36,36-TRAINNUM))];
%T_test=[T(:,linspace(TRAINNUM+1,36,36-TRAINNUM))];
X_test=X;
T_test=T;
[tmp1,Out_test,Out_E,Out_SSE]=PredictNet21(Wij,bj,Wjk,bk,X_test,T_test);
%輸出誤差
%plot(linspace(0,36-TRAINNUM-1,36-TRAINNUM),Out_E,'bo-');hold on;
%plot(linspace(0,36-TRAINNUM-1,36-TRAINNUM),Out_SSE,'rv--');grid on;
figure(1);
hold on;
plot(Out_E.^2,'r*-');grid on;
%T
%Out_test
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -