1、学习神经网络的好助手,可以仿照其中的代码,只需修改个别参数便可以轻易实现自己需要完成的任务。p=p1;t=t1; pn,minp,maxp,tn,mint,maxt=premnmx(p,t); %原始数据归一化net=newff(minmax(pn),5,1,tansig,purelin,traingdx); %设置网络,建立相应的 BP 网络,minmax(pn)找到 pn 矩阵的最大最小值net.trainParam.show=2000; % 训练网络net.trainParam.lr=0.01;net.trainParam.epochs=100000;net.trainParam.goa
2、l=1e-5;net,tr=train(net ,pn,tn); %调用 TRAINGDM 算法训练 BP网络pnew=pnew1; pnewn=tramnmx(pnew,minp,maxp);anewn=sim(net,pnewn); %对 BP 网络进行仿真anew=postmnmx(anewn,mint,maxt); %还原数据y=anew;1、BP 网络构建(1)生成 BP 网络 (,1 2.,1 2.,)netwfPRSNlTFNlBTFLP:由 维的输入样本最小最大值构成的 维矩阵。R:各层的神经元个数。1 2.Sl:各层的神经元传递函数。TF:训练用函数的名称。B(2)网络训练
3、, (,)netrYEPfAtrainetPTiAV(3)网络仿真 , (,)fpefsimtitansig,purelin,trainrpBP 网络的训练函数 训练方法 训练函数梯度下降法 traingd有动量的梯度下降法 traingdm自适应 lr 梯度下降法 traingda自适应 lr 动量梯度下降法 traingdx弹性梯度下降法 trainrpFletcher-Reeves 共轭梯度法 traincgf学习神经网络的好助手,可以仿照其中的代码,只需修改个别参数便可以轻易实现自己需要完成的任务。Ploak-Ribiere 共轭梯度法 traincgpPowell-Beale 共轭梯
4、度法 traincgb量化共轭梯度法 trainscg拟牛顿算法 trainbfg一步正割算法 trainossLevenberg-Marquardt trainlmBP 网络训练参数训练参数 参数介绍 训练函数net.trainParam.epochs 最大训练次数(缺省为 10) traingd、 traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、 trainbfg、trainoss、trainlmnet.trainParam.goal 训练要求精度(缺省为 0) traingd、 traingdm
5、、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、 trainbfg、trainoss、trainlmnet.trainParam.lr 学习率(缺省为 0.01) traingd、 traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、 trainbfg、trainoss、trainlmnet.trainParam.max_fail 最大失败次数(缺省为 5) traingd、 traingdm、traingda、traingdx
6、、trainrp、traincgf、traincgp、traincgb、trainscg、 trainbfg、trainoss、trainlmnet.trainParam.min_grad 最小梯度要求(缺省为 1e-10)traingd、 traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、 trainbfg、trainoss、trainlmnet.trainParam.show 显示训练迭代过程(NaN 表示不显示,缺省为 25)traingd、 traingdm、traingda、traingdx、
7、trainrp、traincgf、traincgp、traincgb、trainscg、 trainbfg、trainoss、trainlmnet.trainParam.time 最大训练时间(缺省为inf)traingd、 traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、 trainbfg、trainoss、trainlm学习神经网络的好助手,可以仿照其中的代码,只需修改个别参数便可以轻易实现自己需要完成的任务。net.trainParam.mc 动量因子(缺省 0.9) traingdm、trai
8、ngdxnet.trainParam.lr_inc 学习率 lr 增长比(缺省为1.05)traingda、traingdxnet.trainParam.lr_dec 学习率 lr 下降比(缺省为0.7)traingda、traingdxnet.trainParam.max_perf_inc 表现函数增加最大比(缺省为 1.04)traingda、traingdxnet.trainParam.delt_inc 权值变化增加量(缺省为1.2)trainrpnet.trainParam.delt_dec 权值变化减小量(缺省为0.5)trainrpnet.trainParam.delt0 初始权值
9、变化(缺省为0.07)trainrpnet.trainParam.deltamax 权值变化最大值(缺省为50.0)trainrpnet.trainParam.searchFcn 一维线性搜索方法(缺省为srchcha)traincgf、traincgp、traincgb、trainbfg、trainossnet.trainParam.sigma 因为二次求导对权值调整的影响参数(缺省值 5.0e-5)trainscgnet.trainParam.lambda Hessian 矩阵不确定性调节参数(缺省为 5.0e-7)trainscgnet.trainParam.men_reduc 控制计算
10、机内存/速度的参量,内存较大设为 1,否则设为 2(缺省为 1)trainlmnet.trainParam.mu 的初始值(缺省为0.001)trainlmnet.trainParam.mu_dec 的减小率(缺省为 0.1) trainlmnet.trainParam.mu_inc 的增长率(缺省为 10) trainlmnet.trainParam.mu_max 的最大值(缺省为1e10)trainlm2、BP 网络举例举例 1、%traingdclear;clc;P=-1 -1 2 2 4;0 5 0 5 7;T=-1 -1 1 1 -1;%利用 minmax 函数求输入样本范围net
11、= newff(minmax(P),5,1,tansig,purelin,trainrp);%minmax(P)取 P 的最大最小值;5,1第一次神经元 5 个,第二层 1 个;tansig,purelin神经网络第一层和第二层的转移函数;trainrp网络训练函数。net.trainParam.show=50; %最多显示训练步数net.trainParam.lr=0.05; %学习率(缺省为 0.01)net.trainParam.epochs=300; %设置训练次数,学习神经网络的好助手,可以仿照其中的代码,只需修改个别参数便可以轻易实现自己需要完成的任务。net.trainParam
12、.goal=1e-5; %设置精确度net,tr=train(net,P,T); %训练开始net.iw1,1%隐层权值net.b1%隐层阈值net.lw2,1%输出层权值net.b2%输出层阈值sim(net,P)举例 2、利用三层 BP 神经网络来完成非线性函数的逼近任务,其中隐层神经元个数为五个。样本数据:输入 X 输出 D 输入 X 输出 D 输入 X 输出 D-1.0000 -0.9602 -0.3000 0.1336 0.4000 0.3072-0.9000 -0.5770 -0.2000 -0.2013 0.5000 0.3960-0.8000 -0.0729 -0.1000 -
13、0.4344 0.6000 0.3449-0.7000 0.3771 0 -0.5000 0.7000 0.1816-0.6000 0.6405 0.1000 -0.3930 0.8000 -0.3120-0.5000 0.6600 0.2000 -0.1647 0.9000 -0.2189-0.4000 0.4609 0.3000 -0.0988 1.0000 -0.3201解:看到期望输出的范围是 ,所以利用双极性 Sigmoid 函数作为转移函数。1,程序如下:clear;clc;X=-1:0.1:1;D=-0.9602 -0.5770 -0.0729 0.3771 0.6405 0.6
14、600 0.4609.0.1336 -0.2013 -0.4344 -0.5000 -0.3930 -0.1647 -.0988.0.3072 0.3960 0.3449 0.1816 -0.312 -0.2189 -0.3201;figure;plot(X,D,*); %绘制原始数据分布图(附录: 1-1)net = newff(-1 1,5 1,tansig,tansig);net.trainParam.epochs = 1000; %训练的最大次数net.trainParam.goal = 0.005; %全局最小误差net = train(net,X,D); O = sim(net,X
15、); figure; plot(X,D,*,X,O); %绘制训练后得到的结果和误差曲线(附录:1-2 、1-3)V = net.iw1,1;%输入层到中间层权值theta1 = net.b1;%中间层各神经元阈值W = net.lw2,1;%中间层到输出层权值学习神经网络的好助手,可以仿照其中的代码,只需修改个别参数便可以轻易实现自己需要完成的任务。theta2 = net.b2;%输出层各神经元阈值所得结果如下:输入层到中间层的权值: -9.16 7.348 .61 4.89 3.50TV中间层各神经元的阈值: 5209-2271中间层到输出层的权值: . . . . .4W输出层各神经元
16、的阈值: -17T举例 3、利用三层 BP 神经网络来完成非线性函数的逼近任务,其中隐层神经元个数为五个。样本数据:输入 X 输出 D 输入 X 输出 D 输入 X 输出 D0 0 4 4 8 21 1 5 3 9 32 2 6 2 10 43 3 7 1解:看到期望输出的范围超出 ,所以输出层神经元利用线性函数作为转移函数。1,程序如下:clear; clc;X = 0 1 2 3 4 5 6 7 8 9 10;D = 0 1 2 3 4 3 2 1 2 3 4;figure;plot(X,D,*); %绘制原始数据分布图net = newff(0 10,5 1,tansig,purelin
17、)net.trainParam.epochs = 100;net.trainParam.goal=0.005;net=train(net,X,D);O=sim(net,X);figure;plot(X,D,*,X,O); %绘制训练后得到的结果和误差曲线(附录:2-2 、2-3)V = net.iw1,1%输入层到中间层权值theta1 = net.b1%中间层各神经元阈值W = net.lw2,1%中间层到输出层权值theta2 = net.b2%输出层各神经元阈值所得结果如下:输入层到中间层的权值: 0.854 2.90 -1.6 .275 -0.391TV中间层各神经元的阈值: -134
18、36学习神经网络的好助手,可以仿照其中的代码,只需修改个别参数便可以轻易实现自己需要完成的任务。中间层到输出层的权值: -0.4675 -1.23 .08 4.62 -.8W输出层各神经元的阈值: T问题:以下是上证指数 2009 年 2 月 2 日到 3 月 27 日的收盘价格,构建一个三层 BP 神经网络,利用该组信号的 6 个过去值预测信号的将来值。日期 价格 日期 价格2009/02/02 2011.682 2009/03/02 2093.4522009/02/03 2060.812 2009/03/03 2071.4322009/02/04 2107.751 2009/03/04 2
19、198.1122009/02/05 2098.021 2009/03/05 2221.0822009/02/06 2181.241 2009/03/06 2193.0122009/02/09 2224.711 2009/03/09 2118.7522009/02/10 2265.161 2009/03/10 2158.5722009/02/11 2260.822 2009/03/11 2139.0212009/02/12 2248.092 2009/03/12 2133.8812009/02/13 2320.792 2009/03/13 2128.8512009/02/16 2389.392
20、2009/03/16 2153.2912009/02/17 2319.442 2009/03/17 2218.3312009/02/18 2209.862 2009/03/18 2223.7312009/02/19 2227.132 2009/03/19 2265.7612009/02/20 2261.482 2009/03/20 2281.0912009/02/23 2305.782 2009/03/23 2325.4812009/02/24 2200.652 2009/03/24 2338.4212009/02/25 2206.572 2009/03/25 2291.5512009/02/
21、26 2121.252 2009/03/26 2361.7012009/02/27 2082.852 2009/03/27 2374.44load data3_1.txt;m,n=size( data3_1); tsx = data3_1(1:m-1,1);tsx=tsx;ts = data3_1(2:m,1);ts=ts;TSX,TSXps=mapminmax(tsx,1,2);TS,TSps=mapminmax(ts,1,2);TSX=TSX;学习神经网络的好助手,可以仿照其中的代码,只需修改个别参数便可以轻易实现自己需要完成的任务。figure;plot(ts,LineWidth,2);
22、title(到杭旅游 总人数(1999.01.01-2009.12.31),FontSize,12);xlabel(统计 年份(1990.12.19-2009.08.19), FontSize,12);ylabel(归一化后的 总游客数 /万人, FontSize,12);grid on;% 生成BP网络、利用minmax函数求输入样本范围net_1=newff(minmax(TS),10,1,tansig,purelin,traincgf)% 设置 训练参数net_1.trainParam.show = 50; %显示训练迭代过 程(NaN 表示不显示,缺省25)net_1.trainPar
23、am.lr = 0.025; %学习率(缺省0.01)net_1.trainParam.mc = 0.9; %动量因子(缺省0.9 )net_1.trainParam.epochs = 10000; %最大训练次数net_1.trainParam.goal = 0.001; %训练要求精度inputWeights=net_1.IW1,1 %输入层权值inputbias=net_1.b1 %输入层阈值 layerWeights=net_1.LW2,1 %输出层权值layerbias=net_1.b2 %输出层阈值TS,TSX% 网 络训练 net_1,tr=train(net_1,TS,TSX)
24、;另一问题隐层个数及训练次数可以在定义网络时自己设定,图形的话是系统自己生成的.题目的意思是 00 得到 0,01 得到 1,10 得到 1,11 得到 0。前者为输入,后者为输出.所以就这样构造:%输入 一共四组,每组两个p=0,0;0,1;1,0;1,1;%输出:t=0,1,1,0;构造神经网络:net=newff(p,t,10,tansig,trainlm);%上面这句话的意思是建立新的神经网络 net,newff(输入,输出, 隐层数量及该层的节点个数,传输函数名,训练函数) ;10代表单隐层,并且该层节点为 10 个,如果想显示多隐层,比如双隐层,10,15这样就行,传输函数也要相应
25、增加,比如 tansig,logsig节点数和传输函数名可以随意调整,目的当然是让预测结果更精确学习神经网络的好助手,可以仿照其中的代码,只需修改个别参数便可以轻易实现自己需要完成的任务。%之后,net.trainParam.goal = 0.00001; %设置精确度net.trainParam.epochs = 5000; %设置训练次数,5000 次net,tr = train(net,p,t); %训练开始。 。 。 。 。 。 。 。这样就可以训练了,过几秒后图片 matlab 会自动生成最后想测试训练结果的话,比如你想打 00 进去看它是不是也给 0p=0 0;a=sim(net,
26、p)。 。 。sim 就是让 net 去预测结果epochs: 100 最大训练次数goal: 0 训练目标max_fail: 5 最多验证失败次数mem_reduc: 1 Factor to use for memory/speed trade offmin_grad: 1.0000e-010 最小训练梯度mu: 1.0000e-003 mu 初始参数mu_dec: 0.1000 mu 减少因子mu_inc: 10 mu 增加因子mu_max: 1.0000e+010 mu 最大可取show: 25 最多显示训练步数time: Inf 最多训练时间,无限制minmax(P_train)得到矩
27、阵 P_train 的最小和最大值(找到每行的最小和最大,有多少行就有多少对最小和最大) ;17,3意思是在隐层建立 17个神经元,输出层建立一个神经元;tansig,logsig,traingdm是神经网络的一些算法;做 BP 网络的话,大概要用到newff, 建立 BPinit 网络初始化train 网络训练sim 仿真记得还要数据归一化啊追问能给上面的数据给个代码么?谢谢啊回答学习神经网络的好助手,可以仿照其中的代码,只需修改个别参数便可以轻易实现自己需要完成的任务。P_pix= 175.8728234 67 0.380957096 0.270238095149.5075249 113
28、0.7558148 0.370238095155.1104445 145 0.934817771 0.46547619151.5008251 95 0.627059291 0.610714286163.4778272 60 0.36702225 0.754761905219.5723116 72 0.327910197 0.257142857176.356725 119 0.674768711 0.351190476139.7621988 185 1.323676942 0.489285714162.3837191 126 0.775939858 0.642857143175.2430455
29、70 0.399445238 0.742857143207.9933893 98 0.471168821 0.280952381140.0357097 116 0.828360139 0.357142857139.3646297 131 0.939980254 0.48452381138.1828499 125 0.904598509 0.632142857175.5874268 67 0.381576296 0.741666667;t=1 0 0;1 1 0; 0 1 0; 0 1 1; 0 0 1;1 0 0;1 1 0; 0 1 0; 0 1 1; 0 0 1;1 0 0;1 1 0;
30、0 1 0; 0 1 1; 0 0 1;t_train=t;P_train=P_pix;P_min_max=minmax(P_train);for n1=1:15P_train(1,n1)=(P_train(1,n1)-P_min_max(1,1)/(P_min_max(1,2)-P_min_max(1,1);P_train(2,n1)=(P_train(2,n1)-P_min_max(2,1)/(P_min_max(2,2)-P_min_max(2,1);endnet = newff(minmax(P_train),17,3,tansig,logsig,trainbfg);net=init(
31、net);net.trainparam.epochs=5000;net.trainparam.show=1000net.trainparam.goal=1e-7;net=train(net,P_train,t_train);P_pix_n=169.0473307 72 0.42591622 0.25952381142.1908928 126 0.886132702 0.371428571148.982568 128 0.859160919 0.50952381148.5 96 0.646464646 0.60952381167.002994 68 0.407178329 0.742857143
32、;P_pix_n=P_pix_n;for n1=1:5P_pix_n(1,n1)=(P_pix_n(1,n1)-P_min_max(1,1)/(P_min_max(1,2)-P_min_max(1,1);P_pix_n(2,n1)=(P_pix_n(2,n1)-P_min_max(2,1)/(P_min_max(2,2)-P_min_max(2,1);学习神经网络的好助手,可以仿照其中的代码,只需修改个别参数便可以轻易实现自己需要完成的任务。endsim(net,P_pix_n)结果是ans =1.0000 0.9789 0.0002 0.0000 0.00000.0282 1.0000 1.0000 0.9999 0.00000.0000 0.0000 0.0056 0.9998 1.0000