当前位置:文档之家› MATLAB程序代码 bp神经网络通用代码

MATLAB程序代码 bp神经网络通用代码

MATLAB程序代码 bp神经网络通用代码
MATLAB程序代码 bp神经网络通用代码

实用标准文案

MATLAB程序代码--bp神经网络通用代码

matlab通用神经网络代码学习了一段时间的神经网络,总结了一些经验,在这愿意和大家分享一下,

希望对大家有帮助,也希望大家可以把其他神经网络的通用代码在这一起分享

感应器神经网络、线性网络、BP神经网络、径向基函数网络

%通用感应器神经网络。

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,:)')

P=[13, 0, 1.119, 1, 26.3;22, 0, 1.135, 1, 26.3;-15, 0, 0.9017, 1, 20.4;-30, 0, 0.9172, 1, 26.7;24,

0,

1.238,0.9704,28.2;3,24,1.119,1,26.3;0,52,1.089,1,26.3;0,-73,1.0889,1,26.3;1,28,0.8748,1,2 6.3;-1,-39,1.1168,1,26.7;-2, 0, 1.495, 1, 26.3;0, -1, 1.438, 1, 26.3;4, 1,0.4964,

0.9021, 26.3;3, -1, 0.5533, 1.2357, 26.7;-5, 0, 1.7368, 1, 26.7;1, 0, 1.1045, 0.0202,

26.3;-2, 0, 1.1168, 1.3764, 26.7;-3, -1, 1.1655, 1.4418,27.5;3, 2, 1.0875, 0.748, 27.5;-3, 0, 1.1068, 2.2092, 26.3;4, 1, 0.9017, 1, 13.7;3, 2, 0.9017, 1, 14.9;-3, 1, 0.9172, 1, 13.7;-2, 0, 1.0198, 1.0809, 16.1;0, 1, 0.9172, 1, 13.7]

T=[1, 0, 0, 0, 0 ;1, 0, 0, 0, 0 ;1, 0, 0, 0, 0 ;1, 0, 0, 0, 0 ;1, 0, 0, 0, 0;

0, 1, 0, 0, 0;0, 1, 0, 0, 0;0, 1, 0, 0, 0;0, 1, 0, 0, 0;0, 1, 0, 0, 0;

0, 0, 1, 0, 0;0, 0, 1, 0, 0;0, 0, 1, 0, 0;0, 0, 1, 0, 0;0, 0, 1, 0, 0;

0, 0, 0, 1, 0 ;0, 0, 0, 1, 0 ;0, 0, 0, 1, 0 ;0, 0, 0, 1, 0 ;0, 0, 0, 1, 0 ;

0, 0, 0, 0, 1;0, 0, 0, 0, 1;0, 0, 0, 0, 1;0, 0, 0, 0, 1;0, 0, 0, 0, 1 ];%期望输出

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

精彩文档.

相关主题
文本预览
相关文档 最新文档