当前位置:文档之家› 广义回归神经网络MATLAB源程序

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

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

x=-2::1

y=2*x.A6+3*x.A5-3*x.A3+x.A2+1

P=x(1:15:e nd)

T=y(1:15:e nd)

spread=[];

l_style=C,'bo--','ko-.','k*--','rA-'};

for i=1:le ngth(spread)

net=n ewgr nn( P,T,spread(i));

a=sim (n et,P);

plot(P,a,l_style{i})

hold on

end

plot(P,T,'o');

lege nd('spread二','spread二','spread二','spread二'

,'spread=','trai n data');

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

load data;

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

p_trai n=p(1:10,:);

p_test=p(11:13,:);

t_trai n=t(1:1O,:);

t_test=t(11:13,:);

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

p_trai n=p_trai n';

t_trai n=t_trai n';

p_test=p_test';

t_test=t_test';

%将数据归一化

[pn ,mi np,maxp,t n,mi nt,maxt]=pre mnm x(p_trai

n,t_ trai n);

p2n=tra mnm x(p_test,mi np,maxp);

for sc=::1;

tic,

net=n ewgr nn(pn ,t n,sc);

sc

toe

Out=sim (n et,p2 n);

a2=post mnm x(Out,mi nt,maxt);

e=t_test-a2';

perf=mse(e);

Y=sim (n et,p n);

a3=post mnm x(Y,mi nt,maxt);

ep=a3-t_tra in; perfp=mse(ep); hold on;

figure(1);

title( '网络的预测误差') plot(se,perf, 'g:*');

hold on;

figure(2);

title( '网络的逼近误差') plot(sc,perfp, 'r:*' );

end

%通用感应器神经网络。

P=[ -40; 1 50];% 输入向量

T=[1 1 0 0 1];% 期望输出 plotpv(P,T);% 描绘输入点图像 net=newp([-40 1;-1 50],1);% 生成网络,其中参数分

别为输入向量的范围和神经元感应器数量 hold on

linehandle=plotpc{1},{1});

for a=1:25% 训练次数 [net,Y,E]=adapt(net,P,T);

linehandle=plotpc{1},{1},linehandle); drawnow;

end

%通用 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(' 时间 ');

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) hold 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 范围 ',[ 各层神经元数

目],{ 各层传递函数 },' 训练函数 '

%训练函数 traingd-- 梯度下降法,有 7 个训练参数 . %训练函数 traingdm-- 有动量的梯度下降法 , 附加 1 个

训练参数mc(动量因子,缺省为

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

加 3 个训练参数 :lr_inc( 学习率增长比,缺省为 ;

% lr_dec( 学习率下降

比,缺省为 ;max_perf_inc( 表现函数增加最大比,缺 省为

%训练函数 traingdx-- 有动量的梯度下降法中赋以自 适应

lr 的方法,附加 traingdm 和 traingda 的 4 个附 加参数

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

缺省为 ;delt_dec( 权值变化减小量,缺省为 ;

% delta0( 初始权值变化,缺省

为;deltamax(权值变化最大值,缺省为

% 适合大型网络

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

训练函数 traincgp--Polak-Ribiere 共轭梯度法 ;

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

%共 轭梯 度法 占用 存储 空间 小, 附 加 1 训 练 参 数

searchFcn( 一维线性搜索方法 , 缺省为 srchcha); 缺 少

1 个训练参数 lr

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

% 附 加 2 个 训 练 参 数 :sigma( 因为二次求导对权值调整的影响参数, 缺省 为;

%

lambda(Hessian 阵不确定性调节参数,缺省为

% 缺少 1 个训练参数 :lr

%训练函数 trainbfg--BFGS 拟牛顿回退法 , 收敛速度 快,

但需要更多内存 , 与共轭梯度法训练参数相同 , 适 合小网络

%训练函数trainoss-- —步正割的BP训练法,解决了

BFGS消耗内存的问题,与共轭梯度法训练参数相同 %训练函数 trainlm--Levenberg-Marquardt 训练法 ,

用于内存充足的中小型网络

net=init(net);

%最大训练次数 ( 前缺省为 10, 自 trainrp 后,缺 省为 100)

% 学习率 ( 缺省为

为 25)

%训练要求精度 ( 缺省为 0)

% 最大失败次数 ( 缺省为 5)

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

% 最大训练时间 ( 缺省为 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 开始增加 , 直到达到训练精度或神经元数 目最多为止

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

P=[4 5 6];

T=[ ];

net=newgrnn(P,T);

%仿真验证

p=;

v=sim(net,p)

%PNI网络,概率神经网络

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]';

相关主题