广义回归神经网络MATLAB源程序.doc

上传人:b****1 文档编号:237511 上传时间:2022-10-07 格式:DOC 页数:15 大小:24KB
下载 相关 举报
广义回归神经网络MATLAB源程序.doc_第1页
第1页 / 共15页
广义回归神经网络MATLAB源程序.doc_第2页
第2页 / 共15页
广义回归神经网络MATLAB源程序.doc_第3页
第3页 / 共15页
广义回归神经网络MATLAB源程序.doc_第4页
第4页 / 共15页
广义回归神经网络MATLAB源程序.doc_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

广义回归神经网络MATLAB源程序.doc

《广义回归神经网络MATLAB源程序.doc》由会员分享,可在线阅读,更多相关《广义回归神经网络MATLAB源程序.doc(15页珍藏版)》请在冰豆网上搜索。

广义回归神经网络MATLAB源程序.doc

GRNN神经网络---广义回归神经网络,主要用于函数逼近。

 

x=-2:

0.01:

1

y=2*x.^6+3*x.^5-3*x.^3+x.^2+1

P=x(1:

15:

end)

T=y(1:

15:

end)

spread=[0.050.20.40.60.8];

l_style={'r.-','bo--','ko-.','k*--','r^-'};

fori=1:

length(spread)

   net=newgrnn(P,T,spread(i));

   a=sim(net,P);

   plot(P,a,l_style{i})

   holdon

end

plot(P,T,'o');

legend('spread=0.05','spread=0.2','spread=0.4','spread=0.6','spread=0.8','traindata');

title('GRNN神经网络spread探讨')

loaddata;

%载入数据并将数据分成训练和预测两类

p_train=p(1:

10,:

);

p_test=p(11:

13,:

);

t_train=t(1:

10,:

);

t_test=t(11:

13,:

);

%将各个矩阵转置以便适应网络结构

p_train=p_train';

t_train=t_train';

p_test=p_test';

t_test=t_test';

%将数据归一化

[pn,minp,maxp,tn,mint,maxt]=premnmx(p_train,t_train);

p2n=tramnmx(p_test,minp,maxp);

forsc=0.1:

0.01:

1;

tic,

net=newgrnn(pn,tn,sc);

sc

toc

Out=sim(net,p2n);

a2=postmnmx(Out,mint,maxt);

e=t_test-a2';

perf=mse(e);

Y=sim(net,pn);

a3=postmnmx(Y,mint,maxt);

ep=a3-t_train;

perfp=mse(ep);

holdon;

figure

(1);

title('网络的预测误差')

plot(sc,perf,'g:

*');

holdon;

figure

(2);

title('网络的逼近误差')

plot(sc,perfp,'r:

*');

end

%通用感应器神经网络。

P=[-0.5-0.50.3-0.1-40;-0.50.5-0.5150];%输入向量

T=[11001];%期望输出

plotpv(P,T);%描绘输入点图像

net=newp([-401;-150],1);%生成网络,其中参数分别为输入向量的范围和神经元感应器数量

holdon

linehandle=plotpc(net.iw{1},net.b{1});

net.adaptparam.passes=3;

fora=1:

25%训练次数

[net,Y,E]=adapt(net,P,T);

linehandle=plotpc(net.iw{1},net.b{1},linehandle);

drawnow;

end

%通用newlin程序

%通用线性网络进行预测

time=0:

0.025:

5;

T=sin(time*4*pi);

Q=length(T);

P=zeros(5,Q);%P中存储信号T的前5(可变,根据需要而定)次值,作为网络输入。

P(1,2:

Q)=T(1,1:

(Q-1));

P(2,3:

Q)=T(1,1:

(Q-2));

P(3,4:

Q)=T(1,1:

(Q-3));

P(4,5:

Q)=T(1,1:

(Q-4));

P(5,6:

Q)=T(1,1:

(Q-5));

plot(time,T)%绘制信号T曲线

xlabel('时间');

ylabel('目标信号');

title('待预测信号');

net=newlind(P,T);%根据输入和期望输出直接生成线性网络

a=sim(net,P);%网络测试

figure

(2)

plot(time,a,time,T,'+')

xlabel('时间');

ylabel('输出-目标+');

title('输出信号和目标信号');

e=T-a;

figure(3)

plot(time,e)

holdon

plot([min(time)max(time)],[00],'r:

')%可用plot(x,zeros(size(x)),'r:

')代替

holdoff

xlabel('时间');

ylabel('误差');

title('误差信号');

%通用BP神经网络

P=[-1-122;0505];

t=[-1-111];

net=newff(minmax(P),[3,1],{'tansig','purelin'},'traingd');

%输入参数依次为:

'样本P范围',[各层神经元数目],{各层传递函数},'训练函数'

%训练函数traingd--梯度下降法,有7个训练参数.

%训练函数traingdm--有动量的梯度下降法,附加1个训练参数mc(动量因子,缺省为0.9)

%训练函数traingda--有自适应lr的梯度下降法,附加3个训练参数:

lr_inc(学习率增长比,缺省为1.05;

%           lr_dec(学习率下降比,缺省为0.7);max_perf_inc(表现函数增加最大比,缺省为1.04)

%训练函数traingdx--有动量的梯度下降法中赋以自适应lr的方法,附加traingdm和traingda的4个附加参数

%训练函数trainrp--弹性梯度下降法,可以消除输入数值很大或很小时的误差,附加4个训练参数:

%        delt_inc(权值变化增加量,缺省为1.2);delt_dec(权值变化减小量,缺省为0.5);

%        delta0(初始权值变化,缺省为0.07);deltamax(权值变化最大值,缺省为50.0)

%        适合大型网络

%训练函数traincgf--Fletcher-Reeves共轭梯度法;训练函数traincgp--Polak-Ribiere共轭梯度法;

%训练函数traincgb--Powell-Beale共轭梯度法

%共轭梯度法占用存储空间小,附加1训练参数searchFcn(一维线性搜索方法,缺省为srchcha);缺少1个训练参数lr

%训练函数trainscg--量化共轭梯度法,与其他共轭梯度法相比,节约时间.适合大型网络           

%        附加2个训练参数:

sigma(因为二次求导对权值调整的影响参数,缺省为5.0e-5);

%                  lambda(Hessian阵不确定性调节参数,缺省为5.0e-7)

%        缺少1个训练参数:

lr

%训练函数trainbfg--BFGS拟牛顿回退法,收敛速度快,但需要更多内存,与共轭梯度法训练参数相同,适合小网络

%训练函数trainoss--一步正割的BP训练法,解决了BFGS消耗内存的问题,与共轭梯度法训练参数相同

%训练函数trainlm--Levenberg-Marquardt训练法,用于内存充足的中小型网络

net=init(net);

net.trainparam.epochs=300;  %最大训练次数(前缺省为10,自trainrp后,缺省为100)

net.trainparam.lr=0.05;   %学习率(缺省为0.01)

net.trainparam.show=50;   %限时训练迭代过程(NaN表示不显示,缺省为25)

net.trainparam.goal=1e-5;%训练要求精度(缺省为0)

%net.trainparam.max_fail   最大失败次数(缺省为5)

%net.trainparam.min_grad   最小梯度要求(前缺省为1e-10,自trainrp后,缺省为1e-6)

%net.trainparam.time    最大训练时间(缺省为inf)

[net,tr]=train(net,P,t);   %网络训练

a=sim(net,P)           %网络仿真

%通用径向基函数网络——

%其在逼近能力,分类能力,学习速度方面均优于BP神经网络

%在径向基网络中,径向基层的散步常数是spread的选取是关键

%spread越大,需要的神经元越少,但精度会相应下降,spread的缺省值为1

%可以通过net=newrbe(P,T,spread)生成网络,且误差为0

%可以通过net=newrb(P,T,goal,spread)生成网络,神经元由1开始增加,直到达到训练精度或神经元数目最多为止

%GRNN网络,迅速生成广义回归神经网络(GRNN)

P=[456];

T=[1.53.66.7];

net=newgrnn(P,T);

%仿真验证

p=4.5;

v=sim(net,p)

%PNN网络,概率神经网络

P=[00;11;03;14;31;41;43]';

Tc=[1122333];

%将期望输出通过ind2vec()转换,并设计、验证网络

T=ind2vec(Tc);

net=newpnn(P,T);

Y=sim(net,P);

Yc=vec2ind(Y)

%尝试用其他的输入向量验证网络

P2=[14;01;52]';

Y=sim(net,P2);

Yc=vec2ind(Y)

%应用newrb()函数构建径向基网络,对一系列数据点进行函数逼近

P=-1:

0.1:

1;

T=[-0.9602-0.5770-0.07290.37710.64050.66000.4609...

0.1336-0.2013-0.4344-0.500-0.3930-0.1647-0.0988...

0.30720.39600.34490.1816-0.0312-0.2189-0.3201];

%绘制训练用样本的数据点

plot(P,T,'r*');

title('训练样本');

xlabel('输入向量P');

ylabel('目标向量T');

%设计一个径向基函数网络,网络有两层,隐层为径向基神经元,输出层为线性神经元

%绘制隐层神经元径向基传递函数的曲线

p=-3:

.1:

3;

a=radbas(p);

plot(p,a)

title('径向基传递函数')

xlabel('输入向量p')

%隐层神经元的权值、阈值与径向基函数的位置和宽度有关,只要隐层神经元数目、权值、阈值正确,可逼近任意函数

%例如

a2=radbas(p-1.5);

a3=radbas(p+2);

a4=a+a2*1.5+a3*0.5;

plot(p,a,'b',p,a2,'g',p,a3,'r',p,a4,'m--')

title('径向基传递函数权值之和')

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > IT认证

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1