matlab通用神经网络代码,matlab通用神经网络代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
matlab通⽤神经⽹络代码,matlab通⽤神经⽹络代码%通⽤感应器神经⽹络。
P=[-0.5 -0.5 0.3 -0.1 -40;-0.5 0.5 -0.5 1 50];%输⼊向量
T=[1 1 0 0 1];%期望输出
plotpv(P,T);%描绘输⼊点图像
net=newp([-40 1;-1 50],1);%⽣成⽹络,其中参数分别为输⼊向量的范围和神经元感应器数量
hold on
linehandle=plotpc(net.iw{1},net.b{1});
net.adaptparam.passes=3;
for a=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)
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(动量因⼦,缺省为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=[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=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('径向基传递函数权值之和') 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,:)')。