先用newff函数建立网络,再用train函数训练即可。
1)正向传播:输入样本->输入层->各隐层(处理)->输出层注1:若输出层实际输出与期望输出(教师信号)不符,则转入2)(误差反向传播过程)2)误差反向传播:输出误差(某种形式)->隐层(逐层)->输入层其主要目的是通过将输出误差反传,将误差分摊给各层所有单元,从而获得各层单元的误差信号,进而修正各单元的权值(其过程,是一个权值调整的过程)。
BP算法实现步骤(软件):1)初始化2)输入训练样本对,计算各层输出3)计算网络输出误差4)计算各层误差信号5)调整各层权值6)检查网络总误差是否达到精度要求满足,则训练结束;不满足,则返回步骤2)注:改进算法—增加动量项、自适应调整学习速率(这个似乎不错)及引入陡度因子。
谷歌人工智能写作项目:小发猫
matlab带有神经网络工具箱,可直接调用,建议找本书看看,或者MATLAB论坛找例子人工神经网络原理公式,人工神经网络基本原理。
核心调用语句如下:%数据输入%选连样本输入输出数据归一化[inputn,inputps]=mapminmax(input_train);[outputn,outputps]=mapminmax(output_train);%%BP网络训练%%初始化网络结构net=newff(inputn,outputn,[88]);net.trainParam.epochs=100;=0.01;=0.01;%网络训练net=train(net,inputn,outputn);%%BP网络预测%预测数据归一化inputn_test=mapminmax('apply',input_test,inputps);%网络预测输出an=sim(net,inputn_test);%网络输出反归一化BPoutput=mapminmax('reverse',an,outputps);%%结果分析。
。
楼主,首先,我不是高手其次,你的T中间的00最好分开写,还有threshold中的01(如果是要分开的话)再次,newff中的,我改成了这样net=newff(threshold,[5,5],{‘tansig’,’logsig’},‘traingdx’);单引号要切换成英文输入后打进去最后,我的可以运行了。
可能发生了过度拟合的问题,导致网络泛化能力不足。你训练的样本波动性很强,但是你检验的样本波动性很弱,神经网络在适应变化极大的问题时,效果不太好。
泛化:当某一反应与某种刺激形成条件联系后,这一反应也会与其它类似的刺激形成某种程度的条件联系,这一过程称为泛化。
在心理学心理咨询中所谓泛化指的是:引起求助者目前不良的心理和行为反应的刺激事件不再是最初的事件,同最初刺激事件相类似、相关联的事件(已经泛化),甚至同最初刺激事件不类似、无关联的事件(完全泛化),也能引起这些心理和行为反应(症状表现)。
。
%运用比例共轭梯度动量算法来训练BP网络clearall;pause(1);P=[0.14520.14660.13140.22430.35230.46420.50150.69810.78210.83450.96491.1560.24150.30270;0.12170.15810.14080.23040.31430.43120.58190.71250.80650.86470.97261.1320.23850.31250;0.15250.16270.15070.24060.35020.46360.50510.73520.84590.89150.96541.1560.22160.27011;0.10160.11050.12340.19780.30210.42320.58190.69520.80150.87250.98251.0950.23520.25060.5;0.11150.12010.13120.20190.35320.47360.50290.70320.81890.86190.93651.1250.25420.31250;0.13350.13220.15340.22140.36230.48270.51980.72760.83590.89060.95921.1430.26010.31980;0.13680.14320.16530.22050.38230.49710.51360.71290.82630.89530.98911.1370.25790.30990;0.13420.13680.16020.21310.37260.48220.51010.70980.81270.89210.99951.1260.23010.28670.5;0.11130.12120.13050.18190.39520.43120.58860.68980.79990.84230.97211.0950.22340.27991;0.10050.11210.12070.16050.35560.40220.55530.66730.77980.86230.95211.0870.23140.29770]';T=[0.12170.15810.14080.23040.31430.43120.58190.71250.82650.88470.98261.132;0.15250.16270.15070.24060.35020.46360.50510.73520.84590.89150.94641.156;0.10160.11050.12340.19780.30210.42320.58190.69520.80150.88250.98251.102;0.11150.12010.13120.20190.35320.47360.50290.70320.81890.89190.99651.125;0.13350.13220.15340.22140.36230.48270.51980.72760.83590.85060.98921.123;0.13680.14320.16530.22050.38230.49710.51360.71290.82630.89530.96911.117;0.13420.13680.16020.21310.37260.48220.51010.70980.81270.89210.99951.126;0.11130.12120.13050.18190.39520.43120.58860.68980.79990.83230.97211.156;0.10050.11210.12070.16050.35560.40220.55530.66730.77980.86230.95211.156;0.11230.12570.13430.20790.35790.47160.54590.71450.82050.89010.94191.136]';threshold=[01;01;01;01;01;01;01;01;01;01;01;01;01;01;01];net=newff(threshold,[32,12],{'tansig','logsig'},'trainscg','learngdm');%新建BP神经网络net.trainParam.epochs=1000;%bp网络训练次数=0.002;%网络训练目标=0.01;%网络学习速率[net,tr]=train(net,P,T);%训练网络P_test=[0.11230.12570.13430.20790.35790.47160.54590.71450.82050.89010.94191.1360.23170.29360]';%网络输入数据Out=sim(net,P_test);%网络仿真X=[0.11190.12150.16210.21610.34710.46390.55550.70610.82430.89230.95221.129];%实际测得数据t=1:1:12;boxoff;gridoff;plot(t,Out,'b',t,X,'r');%画出二维图形set(gca,'Xtick',0:1:24,'Ytick',0:.1:1.4);%设置坐标title('基于BP网络的设备故障时间序列预测');xlabel('时间/2小时');ylabel('加速度/g');text(1.5,1.2,'预测振动曲线(蓝)');text(1.5,1.1,'实际测试曲线(红)');。
。
你的程序训练完毕后根本就没达到目标误差,就是说训练效果不好,不能进行预测,只有训练结果好了才能预测仿真,你再改一下隐含层神经元数或者训练和传递函数试试吧~另外输入层的值可以归一化也可以不归一化,归一化后在仿真之前要反归一化。