《2022年广义回归神经网络MATLAB源程序.pdf》由会员分享,可在线阅读,更多相关《2022年广义回归神经网络MATLAB源程序.pdf(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、GRNN 神经网络 - 广义回归神经网络,主要用于函数逼近。x=-2: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= ; l_style=,bo-,ko-.,k*-,r-; for i=1:length(spread) net=newgrnn(P,T,spread(i); a=sim(net,P); plot(P,a,l_stylei) hold on end plot(P,T,o); legend(spread=,spread=,spread=,spread=,spread=,train data); title
2、(GRNN神经网络 spread 探讨) 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 1 页,共 15 页 - - - - - - - - - - load data ; % 载入数据并将数据分成训练和预测两类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
3、=t_test; % 将数据归一化pn,minp,maxp,tn,mint,maxt=premnmx(p_train,t_train); p2n=tramnmx(p_test,minp,maxp); for sc=:1; tic, net=newgrnn(pn,tn,sc); 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 2 页,共 15 页 - - - - - - - - - - sc toc Out=sim(net,p2n); a2=postmnmx(Out,mint,maxt); e=t_test
4、-a2; perf=mse(e); Y=sim(net,pn); a3=postmnmx(Y,mint,maxt); ep=a3-t_train; perfp=mse(ep); hold on; figure(1); title( 网络的预测误差 ) plot(sc,perf,g:*); hold on; figure(2); title( 网络的逼近误差 ) plot(sc,perfp,r:*); end精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 3 页,共 15 页 - - - - - - - -
5、 - - % 通用感应器神经网络。P= -40; 1 50;%输入向量T=1 1 0 0 1;%期望输出plotpv(P,T);%描绘输入点图像net=newp(-40 1;-1 50,1);% 生成网络,其中参数分别为输入向量的范围和神经元感应器数量hold on linehandle=plotpc1,1); for a=1:25% 训练次数net,Y,E=adapt(net,P,T); linehandle=plotpc1,1,linehandle); drawnow; end 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - -
6、- - - - - -第 4 页,共 15 页 - - - - - - - - - - % 通用 newlin 程序% 通用线性网络进行预测time=0: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(时
7、间); ylabel(目标信号 ); title(待预测信号 ); net=newlind(P,T);%根据输入和期望输出直接生成线性网络a=sim(net,P);% 网络测试figure(2) plot(time,a,time,T,+) xlabel(时间); 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 5 页,共 15 页 - - - - - - - - - - ylabel(输出-目标+); title(输出信号和目标信号 ); e=T-a; figure(3) plot(time,e) hol
8、d on plot(min(time) max(time),0 0,r:)%可 用plot(x,zeros(size(x),r:)代替hold off xlabel(时间); ylabel(误差); title(误差信号 ); % 通用 BP神经网络P=-1 -1 2 2;0 5 0 5; t=-1 -1 1 1; net=newff(minmax(P),3,1,tansig,purelin,traingd); % 输入参数依次为: 样本P 范围 ,各层神经元数目, 各层传递函数 ,训练函数 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - -
9、 - - - - - - - -第 6 页,共 15 页 - - - - - - - - - - % 训练函数 traingd-梯度下降法,有7 个训练参数 . % 训练函数 traingdm- 有动量的梯度下降法 , 附加 1 个训练参数 mc(动量因子,缺省为% 训练函数 traingda-有自适应 lr的梯度下降法 , 附加 3 个训练参数 :lr_inc(学习率增长比,缺省为 ; % lr_dec(学习率下降比,缺省为 ;max_perf_inc(表现函数增加最大比,缺省为% 训练函数traingdx-有动量的梯度下降法中赋以自适应 lr 的方法,附加 traingdm 和 train
10、gda的 4 个附加参数% 训练函数trainrp-弹性梯度下降法 , 可以消除输入数值很大或很小时的误差,附加4 个训练参数 : % delt_inc(权值变化增加量,缺省为 ;delt_dec(权值变化减小量,缺省为; % delta0(初始权值变化,缺省为;deltamax( 权值变化最大值 , 缺省为% 适合大型网络% 训练函数 traincgf-Fletcher-Reeves共轭梯度法 ;训练函数 traincgp-Polak-Ribiere共轭梯度法 ; % 训练函数 traincgb-Powell-Beale共轭梯度法% 共 轭梯 度法 占用 存储 空间 小, 附 加 1 训 练
11、参 数精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 7 页,共 15 页 - - - - - - - - - - searchFcn( 一维线性搜索方法, 缺省为srchcha); 缺少 1 个训练参数 lr % 训练函数trainscg-量化共轭梯度法 , 与其他共轭梯 度 法 相 比 , 节 约 时 间 . 适 合 大 型 网络% 附 加2个 训 练 参数:sigma( 因为二次求导对权值调整的影响参数,缺省为; % lambda(Hessian阵不确定性调节参数,缺省为% 缺少 1 个训练参数 :
12、lr % 训练函数trainbfg-BFGS拟牛顿回退法 , 收敛速度快, 但需要更多内存 , 与共轭梯度法训练参数相同, 适合小网络% 训练函数 trainoss-一步正割的 BP训练法 , 解决了BFGS 消耗内存的问题 , 与共轭梯度法训练参数相同% 训练函数trainlm-Levenberg-Marquardt训练法 ,用于内存充足的中小型网络net=init(net); %最大训练次数 (前缺省为 10, 自 trainrp后,缺省为 100) %学习率 ( 缺省为精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - -
13、- - - -第 8 页,共 15 页 - - - - - - - - - - %限时训练迭代过程 (NaN 表示不显示,缺省为 25) %训练要求精度 (缺省为 0) % 最大失败次数 ( 缺省为 5) % 最小梯度要求 ( 前缺省为 1e-10, 自 trainrp后,缺省为 1e-6) % 最大训练时间 (缺省为 inf) net,tr=train(net,P,t); %网络训练a=sim(net,P) %网络仿真% 通用径向基函数网络% 其在逼近能力 , 分类能力 , 学习速度方面均优于BP神经网络% 在径向基网络中 , 径向基层的散步常数是spread 的选取是关键%spread 越
14、大 , 需要的神经元越少, 但精度会相应下降,spread 的缺省值为 1 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 9 页,共 15 页 - - - - - - - - - - % 可以通过net=newrbe(P,T,spread)生成网络 , 且误差为 0 % 可以通过net=newrb(P,T,goal,spread)生成网络 ,神经元由1 开始增加 , 直到达到训练精度或神经元数目最多为止%GRNN网络, 迅速生成广义回归神经网络(GRNN) P=4 5 6; T= ; net=newgr
15、nn(P,T); % 仿真验证p=; v=sim(net,p) %PNN 网络, 概率神经网络P=0 0 ;1 1;0 3;1 4;3 1;4 1;4 3; Tc=1 1 2 2 3 3 3; % 将期望输出通过ind2vec() 转换, 并设计、验证网络T=ind2vec(Tc); net=newpnn(P,T); Y=sim(net,P); Yc=vec2ind(Y) % 尝试用其他的输入向量验证网络P2=1 4;0 1;5 2; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 10 页,共 15 页
16、 - - - - - - - - - - Y=sim(net,P2); Yc=vec2ind(Y) % 应用 newrb() 函数构建径向基网络 , 对一系列数据点进行函数逼近P=-1:1; T= . . ; % 绘制训练用样本的数据点plot(P,T,r*); title(训练样本 ); xlabel(输入向量 P); ylabel(目标向量 T); % 设计一个径向基函数网络,网络有两层, 隐层为径向基神经元 , 输出层为线性神经元% 绘制隐层神经元径向基传递函数的曲线p=-3:.1:3; a=radbas(p); plot(p,a) title(径向基传递函数 ) xlabel(输入向量
17、 p) % 隐层神经元的权值、 阈值与径向基函数的位置和宽度精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 11 页,共 15 页 - - - - - - - - - - 有关, 只要隐层神经元数目、权值、阈值正确, 可逼近任意函数% 例如a2=radbas; a3=radbas(p+2); a4=a+a2*+a3*; plot(p,a,b,p,a2,g,p,a3,r,p,a4,m-) title(径向基传递函数权值之和) xlabel(输入 p); ylabel(输出 a); % 应用 newrb()
18、函数构建径向基网络的时候, 可以预先设定均方差精度 eg 以及散布常数 sc eg=; sc=1; %其值的选取与最终网络的效果有很大关系, 过小造成过适性 , 过大造成重叠性net=newrb(P,T,eg,sc); % 网络测试plot(P,T,*) xlabel(输入); X=-1:.01:1; Y=sim(net,X); hold on 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 12 页,共 15 页 - - - - - - - - - - plot(X,Y); hold off legen
19、d( 目标,输出) % 应用 grnn 进行函数逼近P=1 2 3 4 5 6 7 8; T=0 1 2 3 2 1 2 1; plot(P,T,.,markersize,30) axis(0 9 -1 4) title(待逼近函数 ) xlabel(P) ylabel(T) % 网络设计% 对于离散数据点 , 散布常数spread 选取比输入向量之间的距离稍小一些spread=; net=newgrnn(P,T,spread); % 网络测试A=sim(net,P); hold on outputline=plot(P,A,o,markersize,10,color,1 0 0); titl
20、e(检测网络 ) 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 13 页,共 15 页 - - - - - - - - - - xlabel(P) ylabel(T和 A) % 应用 pnn进行变量的分类P=1 2;2 2;1 1; %输入向量Tc=1 2 3; %P对应的三个期望输出% 绘制出输入向量及其相对应的类别plot(P(1,:),P(2,:),.,markersize,30) for i=1:3 text(P(1,i)+,P(2,i),sprintf(class %g,Tc(i) end a
21、xis(0 3 0 3); title(三向量及其类别 ) xlabel(P(1,:) ylabel(P(2,:) % 网络设计T=ind2vec(Tc); spread=1; net=newgrnn(P,T,speard); % 网络测试A=sim(net,P); Ac=vec2ind(A); %绘制输入向量及其相应的网络输出精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 14 页,共 15 页 - - - - - - - - - - plot(P(1,:),P(2,:),.,markersize,30) for i=1:3 text(P(1,i)+,P(2,i),sprintf(class %g,Ac(i) end axis(0 3 0 3); title(网络测试结果 ) xlabel(P(1,:) ylabel(P(2,:)精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 15 页,共 15 页 - - - - - - - - - -
限制150内