天牛须matlab,基于天牛须搜索算法(BAS)优化BP神经网络的权值阈值代码
%% 使用優化后的權值和閾值測試結果
%% 使用優化后的權值和閾值
inputnum=size(P,1);%輸入層神經元個數
outputnum=size(T,1);%輸出層神經元個數
N=size(P_test,2);
M=size(P,2);
%% 新建BP
net=newff(P,T,9);
%% 設置網絡參數:訓練次數1000,訓練目標0.001,學習速率00.1
net.trainParam.epochs =3000;
net.trainParam.goal = 1e-6;
net.trainParam.lr = 0.01;
%% BP初始權值和閾值
w1num=inputnum*hiddennum;%輸入層到隱含層的權值個數
w2num=outputnum*hiddennum;%隱含層到輸入層的權值個數
w1=bestX(1:w1num);%初始輸入層到隱含層的權值
B1=bestX(w1num+1:w1num+hiddennum);
w2=bestX(w1num+hiddennum+1:w1num+hiddennum+w2num);%初始隱含層到輸出層的權值
B2=bestX(w1num+hiddennum+w2num+1:w1num+hiddennum+w2num+outputnum);%輸出層閾值
net.iw{1,1}=reshape(w1,hiddennum,inputnum);
net.lw{2,1}=reshape(w2,outputnum,hiddennum);
net.b{1}=reshape(B1,hiddennum,1);
net.b{2}=reshape(B2,outputnum,1);
%% 訓練網絡
net=train(net,P,T);
%% 測試網絡
t_sim_P= sim(net,P);
t_sim_P_test= sim(net,P_test);
%% 反歸一化
T=mapminmax('reverse',T,ps_output);
T_sim_P= mapminmax('reverse',t_sim_P,ps_output);
T_sim_P_test = mapminmax('reverse',t_sim_P_test,ps_output);
%% 相對誤差
error_P=abs(T_sim_P-T)./T;
error_P_test=abs(T_sim_P_test-T_test)./T_test;
%% 相關系數
R2_P= (M * sum(T_sim_P .* T) - sum(T_sim_P) * sum(T))^2 / ((M * sum((T_sim_P).^2) - (sum(T_sim_P))^2) * (M * sum((T).^2) - (sum(T))^2));
R2_P_test = (N * sum(T_sim_P_test .* T_test) - sum(T_sim_P_test) * sum(T_test))^2 / ((N * sum((T_sim_P_test).^2) - (sum(T_sim_P_test))^2) * (N * sum((T_test).^2) - (sum(T_test))^2));
%% 結果對比
result = [T_test' T_sim_P_test' abs(T_test-T_sim_P_test)']
result=[T' T_sim_P' abs(T-T_sim_P)']
總結
以上是生活随笔為你收集整理的天牛须matlab,基于天牛须搜索算法(BAS)优化BP神经网络的权值阈值代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php curl 库参数,PHP 关于c
- 下一篇: matlab人脸追踪,求大神帮助我这个菜