登 录
註 冊
论坛
微波仿真网
注册
登录论坛可查看更多信息
微波仿真论坛
>
程序
>
遗传算法优化BP神经网络权值和阈值的通用MAT ..
发帖
回复
3887
阅读
0
回复
[
资料共享
]
遗传算法优化BP神经网络权值和阈值的通用MATLAB源码
离线
greensim
UID :63869
注册:
2010-07-25
登录:
2011-09-15
发帖:
10
等级:
仿真新人
0楼
发表于: 2011-08-29 16:08:02
题目:遗传算法优化BP神经网络权值和阈值的通用MATLAB源码
D|IS@gWa
遗传算法优化神经网络有两种情况,一种是把训练好的神经网络作为黑箱函数,用遗传算法搜索该黑箱函数的最大值,另外一种情况,则是把遗传算法用于神经网络的训练,充分利用遗传算法全局搜索的特性,得到一个初始的权值矩阵和初始的阈值向量,再用其它训练算法(如BP算法),得到最终的神经网络结构。经过GreenSim团队大量实践表明,这种GA和BP网络相结合的方法,能显著地提高BP神经网络的性能,基本上和支持向量机的性能相当,有时甚至优于支持向量机。由于BP网络的权值优化是一个无约束优化问题,而且权值要采用实数编码,所以直接利用Matlab遗传算法工具箱。以下贴出的代码是为一个19输入变量,1个输出变量情况下的非线性回归而设计的,如果要应用于其它情况,只需改动编解码函数即可。此文章首次发表是在simwe论坛,属于GreenSim团队原创作品,转载请注明,有意购买源码或代写相关程序,请与GreenSim团队联系,QQ:761222791
}N"YlGY\Yn
图片:010附图1.jpg
oH(=T/{
程序一:GA训练BP权值的主函数
T%SK";PAU$
function net=GABPNET(XX,YY)
&A~hM[-
%--------------------------------------------------------------------------
Koc5~qUY]
% GABPNET.m
=kBN&v_(!
% 使用遗传算法对BP网络权值阈值进行优化,再用BP算法训练网络
/&zlC{:G92
% GreenSim团队原创作品,转载请注明
W;|%)D)y
% Email:greensim@163.com
M# cJ&+rP
QQ:761222791
4X5KrecNr
%--------------------------------------------------------------------------
+IG=|X
%数据归一化预处理
t@q==VHF
nntwarn off
VUZeC,FfO
XX=premnmx(XX);
x pBQ(6Y
YY=premnmx(YY);
^m -w@0^z
%创建网络
?b\oM v5y
net=newff(minmax(XX),[19,25,1],{'tansig','tansig','purelin'},'trainlm');
- #-Bo
%下面使用遗传算法对网络进行优化
;3+_aoY
P=XX;
X u2+TK
T=YY;
Hd_,`W@
R=size(P,1);
L)"CE].
S2=size(T,1);
c"/Hv
S1=25;%隐含层节点数
Dw<bLSaW&
aa=ones(S,1)*[-1,1];
)&qr2Cm*
popu=50;%种群规模
3e)$ <e
initPpp=initializega(popu,aa,'gabpEval');%初始化种群
yacN=]SW5
gen=100;%遗传代数
:}-izd)/j
%下面调用gaot工具箱,其中目标函数定义为gabpEval
~%@1-
[x,endPop,bPop,trace]=ga(aa,'gabpEval',[],initPpp,[1e-6 1 1],'maxGenTerm',gen,...
>L J<6s[=
'normGeomSelect',[0.09],['arithXover'],[2],'nonUnifMutation',[2 gen 3]);
>{>X.I~
%绘收敛曲线图
&!B4v<#, U
figure(1)
g1~wg$`S8S
plot(trace(:,1),1./trace(:,3),'r-');
9hjzOJPuga
hold on
%<<JWoB
plot(trace(:,1),1./trace(:,2),'b-');
|mT1\O2a
xlabel('Generation');
O"J"H2}S
ylabel('Sum-Squared Error');
ym'!f|9AA
figure(2)
.pIO<ZAFT
plot(trace(:,1),trace(:,3),'r-');
%]N|?9L"=
hold on
me$nP}%C&
plot(trace(:,1),trace(:,2),'b-');
5E =!L g
xlabel('Generation');
'~zi~Q7M
ylabel('Fittness');
EF'8-*
%下面将初步得到的权值矩阵赋给尚未开始训练的BP网络
z-h?Q4;
[W1,B1,W2,B2,P,T,A1,A2,SE,val]=gadecod(x);
B(Er/\-@U
net.LW{2,1}=W1;
,@\z{}~v
net.b{2,1}=B1;
XHh*6Yt_ (
net.b{3,1}=B2;
AYfL}X<Ig
XX=P;
Wu'9ouw!
YY=T;
=ba1::18
%设置训练参数
e'.CIspN
net.trainParam.show=1;
'l_F@ZO{(
net.trainParam.lr=1;
*/4hFD {
net.trainParam.epochs=50;
lLLPvW[Q
net.trainParam.goal=0.001;
l YpoS
%训练网络
NKl`IiGv
net=train(net,XX,YY);
9*VL |
程序二:适应值函数
#x \YA#~
function [sol, val] = gabpEval(sol,options)
RV%)~S@!R
% val - the fittness of this individual
W=Mdh}u_I
% sol - the individual, returned to allow for Lamarckian evolution
"iUh.c=0F,
% options - [current_generation]
oj@=Cq':-
load data2
uzIM?.H
nntwarn off
?%$~Bb _
XX=premnmx(XX);
;9'] na
YY=premnmx(YY);
-FW^fGS+
P=XX;
+3Z+#nGtk
T=YY;
:"cKxd
R=size(P,1);
ahFK^ #s
S2=size(T,1);
!\cVe;<r
S1=25;%隐含层节点数
HQMug
S=R*S1+S1*S2+S1+S2;%遗传算法编码长度
mSGpxZ,IE
for i=1:S,
*0'< DnGW
x(i)=sol(i);
nX8ulGG s
end;
g!^mewtd
[W1, B1, W2, B2, P, T, A1, A2, SE, val]=gadecod(x);
gyxC)br
图片:010附图2.jpg
6VLo4bq 5
程序三:编解码函数
X6xs@tgQ
function [W1, B1, W2, B2, P, T, A1, A2, SE, val]=gadecod(x)
Ok<,_yh
load data2
,s/laZ)V
nntwarn off
tTT :r),}$
YY=premnmx(YY);
M5 ^qc
P=XX;
. Ctd$
T=YY;
;7*T6~tv
R=size(P,1);
`> +:38
S2=size(T,1);
2 a*+mw
S1=25;%隐含层节点数
1'|gxYT
S=R*S1+S1*S2+S1+S2;%遗传算法编码长度
S3&n?\CO:
% 前R*S1个编码为W1
yQf(/Uxk*x
for i=1:S1,
V!NRBXg
for k=1:R,
J[c`Qq:&e
W1(i,k)=x(R*(i-1)+k);
k]~$AaNq
end
m[Mw2 F
end
G!lF5;Ad`
% 接着的S1*S2个编码(即第R*S1个后的编码)为W2
D;[%*q*
for i=1:S2,
a*uG^~ ).
for k=1:S1,
U5p 3b;
W2(i,k)=x(S1*(i-1)+k+R*S1);
>ByqM{?
end
@mb' !r
end
zx@L sp
% 接着的S1个编码(即第R*S1+S1*S2个后的编码)为B1
W)8Pq9Hnv
for i=1: ..
w:x[kA
&"7+k5O
未注册仅能浏览
部分内容
,查看
全部内容及附件
请先
登录
或
注册
共
条评分
发帖
回复