久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

用遺傳算法優(yōu)化BP神經(jīng)網(wǎng)絡(luò)的Matlab編程實(shí)例

 zele 2010-11-21

此文章首次在simwe公開發(fā)表,屬于GreenSim團(tuán)隊(duì)原創(chuàng)作品,,轉(zhuǎn)載請注明!
更多原創(chuàng)程序,,請?jiān)L問GreenSim團(tuán)隊(duì)主頁http://blog.sina.com.cn/greensim

由于BP網(wǎng)絡(luò)的權(quán)值優(yōu)化是一個(gè)無約束優(yōu)化問題,,而且權(quán)值要采用實(shí)數(shù)編碼,所以直接利用Matlab遺傳算法工具箱,。以下貼出的代碼是為一個(gè)19輸入變量,,1個(gè)輸出變量情況下的非線性回歸而設(shè)計(jì)的,如果要應(yīng)用于其它情況,,只需改動編解碼函數(shù)即可,。

程序一:GA訓(xùn)練BP權(quán)值的主函數(shù)
function net=GABPNET(XX,YY)
%--------------------------------------------------------------------------
%  GABPNET.m
%  使用遺傳算法對BP網(wǎng)絡(luò)權(quán)值閾值進(jìn)行優(yōu)化,再用BP算法訓(xùn)練網(wǎng)絡(luò)
%--------------------------------------------------------------------------
%數(shù)據(jù)歸一化預(yù)處理
nntwarn off
XX=premnmx(XX);
YY=premnmx(YY);
%創(chuàng)建網(wǎng)絡(luò)
net=newff(minmax(XX),[19,25,1],{'tansig','tansig','purelin'},'trainlm');
%下面使用遺傳算法對網(wǎng)絡(luò)進(jìn)行優(yōu)化
P=XX;
T=YY;
R=size(P,1);
S2=size(T,1);
S1=25;%隱含層節(jié)點(diǎn)數(shù)
S=R*S1+S1*S2+S1+S2;%遺傳算法編碼長度
aa=ones(S,1)*[-1,1];
popu=50;%種群規(guī)模
initPpp=initializega(popu,aa,'gabpEval');%初始化種群
gen=100;%遺傳代數(shù)
%下面調(diào)用gaot工具箱,,其中目標(biāo)函數(shù)定義為gabpEval
[x,endPop,bPop,trace]=ga(aa,'gabpEval',[],initPpp,[1e-6 1 1],'maxGenTerm',gen,...
  'normGeomSelect',[0.09],['arithXover'],[2],'nonUnifMutation',[2 gen 3]);
%繪收斂曲線圖
figure(1)
plot(trace(:,1),1./trace(:,3),'r-');
hold on
plot(trace(:,1),1./trace(:,2),'b-');
xlabel('Generation');
ylabel('Sum-Squared Error');
figure(2)
plot(trace(:,1),trace(:,3),'r-');
hold on
plot(trace(:,1),trace(:,2),'b-');
xlabel('Generation');
ylabel('Fittness');
%下面將初步得到的權(quán)值矩陣賦給尚未開始訓(xùn)練的BP網(wǎng)絡(luò)
[W1,B1,W2,B2,P,T,A1,A2,SE,val]=gadecod(x);
net.LW{2,1}=W1;
net.LW{3,2}=W2;
net.b{2,1}=B1;
net.b{3,1}=B2;
XX=P;
YY=T;
%設(shè)置訓(xùn)練參數(shù)
net.trainParam.show=1;
net.trainParam.lr=1;
net.trainParam.epochs=50;
net.trainParam.goal=0.001;
%訓(xùn)練網(wǎng)絡(luò)
net=train(net,XX,YY);


程序二:適應(yīng)值函數(shù)
function [sol, val] = gabpEval(sol,options)
% val - the fittness of this individual
% sol - the individual, returned to allow for Lamarckian evolution
% options - [current_generation]
load data2
nntwarn off
XX=premnmx(XX);
YY=premnmx(YY);
P=XX;
T=YY;
R=size(P,1);
S2=size(T,1);
S1=25;%隱含層節(jié)點(diǎn)數(shù)
S=R*S1+S1*S2+S1+S2;%遺傳算法編碼長度
for i=1:S,
   x(i)=sol(i);
end;
[W1, B1, W2, B2, P, T, A1, A2, SE, val]=gadecod(x);

程序三:編解碼函數(shù)
function [W1, B1, W2, B2, P, T, A1, A2, SE, val]=gadecod(x)
load data2
nntwarn off
XX=premnmx(XX);
YY=premnmx(YY);
P=XX;
T=YY;
R=size(P,1);
S2=size(T,1);
S1=25;%隱含層節(jié)點(diǎn)數(shù)
S=R*S1+S1*S2+S1+S2;%遺傳算法編碼長度
% 前R*S1個(gè)編碼為W1
for i=1:S1,
    for k=1:R,
      W1(i,k)=x(R*(i-1)+k);
    end
end
% 接著的S1*S2個(gè)編碼(即第R*S1個(gè)后的編碼)為W2
for i=1:S2,
   for k=1:S1,
      W2(i,k)=x(S1*(i-1)+k+R*S1);
   end
end
% 接著的S1個(gè)編碼(即第R*S1+S1*S2個(gè)后的編碼)為B1
for i=1:S1,
   B1(i,1)=x((R*S1+S1*S2)+i);
end
% 接著的S2個(gè)編碼(即第R*S1+S1*S2+S1個(gè)后的編碼)為B2
for i=1:S2,
   B2(i,1)=x((R*S1+S1*S2+S1)+i);
end
% 計(jì)算S1與S2層的輸出
A1=tansig(W1*P,B1);
A2=purelin(W2*A1,B2);
% 計(jì)算誤差平方和
SE=sumsqr(T-A2);
val=1/SE; % 遺傳算法的適應(yīng)值

本文來自CSDN博客,,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/animaldww/archive/2010/08/02/5780582.aspx

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多