迭代过程(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=[4 5 6]; T=[1.5 3.6 6.7]; net=newgrnn(P,T); %仿真验证 p=4.5; 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]'; Y=sim(net,P2); Yc=vec2ind(Y) %应用 newrb()函数构建径向基网络,对一系列数据点进行函数逼近 P=-1:0.1:1; T=[-0.9602 -0.5770 -0.0729 0.3771 0.6405 0.6600 0.4609... 0.1336 -0.2013 -0.4344 -0.500 -0.3930 -0.1647 -0.0988... 0.3072 0.3960 0.3449 0.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=rad
bas(p+2); a4=a+a2*1.5+a3*0.5; plot(p,a,'b',p,a2,'g',p,a3,'r',p,a4,'m--') title('径向基传递函数权值之和') xlabel('输入 p'); ylabel('输出 a'); %应用 newrb()函数构建径向基网络的时候,可以预先设定均方差精度 eg 以及散布常数 sc eg=0.02; sc=1; %其值的选取与最终网络的效果有很大关系,过小造成过适性,过大造成重叠性 net=newrb(P,T,eg,sc); %网络测试 plot(P,T,'*') xlabel('输入'); X=-1:.01:1; Y=sim(net,X); hold on plot(X,Y); hold off
legend('目标','输出') %应用 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=0.7; net=newgrnn(P,T,spread); %网络测试 A=sim(net,P); hold on outputline=plot(P,A,'o','markersize',10,'color',[1 0 0]); title('检测网络') 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)+0.1,P(2,i),sprintf('class %g',Tc(i))) end axis([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); %绘制输入向量及其相应的网络输出 plot(P(1,:),P(2,:),'.','markersize',30) for i=1:3 text(P(1,i)+0.1,P(2,i),sprintf('class %g',Ac(i))) end
axis([0 3 0 3]); title('网络测试结果') xlabel('P(1,:)') ylabel('P(2,:)')