当前位置:文档之家› BP神经网络matlab源程序代码

BP神经网络matlab源程序代码

BP神经网络matlab源程序代码)%******************************%学习程序%******************************%%======原始数据输入========p=[2845 2833 4488;2833 4488 4554;4488 4554 2928;4554 2928 3497;2928 3497 2261;...3497 2261 6921;2261 6921 1391;6921 1391 3580;1391 3580 4451;3580 4451 2636;...4451 2636 3471;2636 3471 3854;3471 3854 3556;3854 3556 2659;3556 2659 4335;...2659 4335 2882;4335 2882 4084;4335 2882 1999;2882 1999 2889;1999 2889 2175;...2889 2175 2510;2175 2510 3409;2510 3409 3729;3409 3729 3489;3729 3489 3172;...3489 3172 4568;3172 4568 4015;]';%===========期望输出=======t=[4554 2928 3497 2261 6921 1391 3580 4451 2636 3471 3854 3556 2659 ... 4335 2882 4084 1999 2889 2175 2510 3409 3729 3489 3172 4568 4015 ... 3666];ptest=[2845 2833 4488;2833 4488 4554;4488 4554 2928;4554 2928 3497;2928 3497 2261;...3497 2261 6921;2261 6921 1391;6921 1391 3580;1391 3580 4451;3580 4451 2636;...4451 2636 3471;2636 3471 3854;3471 3854 3556;3854 3556 2659;3556 2659 4335;...2659 4335 2882;4335 2882 4084;4335 2882 1999;2882 1999 2889;1999 2889 2175;...2889 2175 2510;2175 2510 3409;2510 3409 3729;3409 3729 3489;3729 3489 3172;...3489 3172 4568;3172 4568 4015;4568 4015 3666]';[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t); %将数据归一化NodeNum1 =20; % 隐层第一层节点数NodeNum2=40; % 隐层第二层节点数TypeNum = 1; % 输出维数TF1 = 'tansig';TF2 = 'tansig';TF3 = 'tansig';net=newff(minmax(pn),[NodeNum1,NodeNum2,TypeNum],{TF1 TF2 TF3},'traingdx');%网络创建traingdmnet.trainParam.show=50;net.trainParam.epochs=50000; %训练次数设置net.trainParam.goal=1e-5; %训练所要达到的精度net.trainParam.lr=0.01; %学习速率net=train(net,pn,tn);p2n=tramnmx(ptest,minp,maxp);%测试数据的归一化an=sim(net,p2n);[a]=postmnmx(an,mint,maxt) %数据的反归一化 ,即最终想得到的预测结果 plot(1:length(t),t,'o',1:length(t)+1,a,'+');title('o 表示预测值--- *表示实际值')grid onm=length(a); %向量a 的长度t1=[t,a(m)];error=t1-a; %误差向量figureplot(1:length(error),error,'-.')title('误差变化图')grid on05001000150020002500300010-610-510-410-310-210-11003100 Epochs T r a i n i n g -B l u e G o a l -B l a c k Performance is 5.67946e-005, Goal is 1e-005中国振动联盟's Archiver 论坛› Matlab讨论区› BP神经网络输入向量和目标向量的格式问题wxywan368发表于2008-3-15 11:46BP神经网络输入向量和目标向量的格式问题P=[-1, -2, 3, 1; -1, 1, 5, -3];% T 为目标矢量T=[-1, -1, 1, 1];pause;clc% 创建一个新的前向神经网络net=newff(minmax(P),[3,1],{'tansig','purelin'},'traingdm')% 当前输入层权值和阈值inputWeights=net.IW{1,1}inputbias=net.b{1}% 当前网络层权值和阈值layerWeights=net.LW{2,1}layerbias=net.b{2}pauseclc% 设置训练参数net.trainParam.show = 50;net.trainParam.lr = 0.05;net.trainParam.mc = 0.9;net.trainParam.epochs = 1000;net.trainParam.goal = 1e-3;pauseclc% 调用TRAINGDM 算法训练BP 网络[net,tr]=train(net,P,T);pauseclc% 对BP 网络进行仿真A = sim(net,P)% 计算仿真误差E = T - AMSE=mse(E)pauseclcecho off上面这个程序运行没有问题,但是下面我把按行向量写入输入向量P=[0.3459, 0.3548, 0.475, 0.6691, 0.6903;0.3595, 0.3705, 0.4932, 0.6848, 0.7302;0.3574 ,0.3688, 0.4914 0.6809, 0.7258;0.3592, 0.3695, 0.493,0.6846, 0.7298;0.3198 ,0.3492, 0.4554, 0.6525 0.6486;0.345, 0.3542, 0.4731, 0.6687, 0.6899;0.3481, 0.3579, 0.4776, 0.6742, 0.6957;0.3626, 0.4094, 0.52150.7033,0.7915;0.3646, 0.4114, 0.5235, 0.7079, 0.7975;0.344,0.3525, 0.4728, 0.6646, 0.6854]目标向量Q=[206, 34.5, 7850, 2600;226, 38.5, 7850, 2600;206, 34.5, 7650, 2500;226, 34.5, 7650, 2500;186, 30.5, 7850,2600;206, 34.5, 7450, 2200; 206, 40.5, 7450, 2200;266, 34.5, 7850, 2600;266, 38.5, 7850, 2600; 206, 30.5, 7450, 2400]输入向量为10x5矩阵,输出向量为10x4矩阵当程序运行时,提示Matrices all have 1 rows,请教下怎么实现上面输入与输出的bp实现。

望各位可以不吝赐教,先谢谢!F117_ren_0发表于2008-3-16 18:32% 创建一个新的前向神经网络net=newff(minmax(P),[3,1],{'tansig','purelin'},'traingdm')% 当前输入层权值和阈值inputWeights=net.IW{1,1}inputbias=net.b{1}你写的(3,1)你还指望能输出10*4的矩阵?你写的代码有问题,输入和输出有问题.[[i] 本帖最后由F117_ren_0 于2008-3-16 18:35 编辑[/i]]wxywan368发表于2008-3-16 19:57问题找出来了,net=newff(minmax(P),[3,1],{'tansig','purelin'},'traingdm')newff()为建立BP神经网络的函数,minmax(pn)表示样本数据经预处理后的网络输入pn的取值范围,[3,1]表示隐层节点数是3,输出层节点数是1,{'tansig','purelin'}表示隐含层中的神经元采用tansig 转换函数,输出层采用purelin函数,'traingdm'表示选择的学习算法。

我的矩阵输出矩阵是10*4,输出层节点数应该为4,隐含层节点数可参考下式:m=(p+q)0.5+a, 其中m为隐层节点数。

隐层节点应该为1-10之间的常数,我更改为10.还有楼上仁兄提出的输入和输出问题,后来经多方面查证,是我的矩阵没有做归一化处理,误差得不到收敛。

最后对其进行归一化处理后,并把输出矩阵改成10*5,模型收敛!感谢楼上的提示和指导!并想继续请教,对于输入矩阵和输出矩阵之间是否存在格式上的对应关系,比如10*5,就必须是10*x?本人在不断学习中,望高人指点!谢谢vccvcvccv发表于2008-4-6 21:50最近与搂主犯了同样的错误!jjwei2003发表于2009-3-23 21:51在这个问题上,困惑也挺大的,在书上看到过p和t的列数要保持相等,否则在运行过程中会出现错误了。

页: [1]。

相关主题