先用newff函数建立网络,再用train函数训练即可。
1)正向传播:输入样本->输入层->各隐层(处理)->输出层注1:若输出层实际输出与期望输出(教师信号)不符,则转入2)(误差反向传播过程)2)误差反向传播:输出误差(某种形式)->隐层(逐层)->输入层其主要目的是通过将输出误差反传,将误差分摊给各层所有单元,从而获得各层单元的误差信号,进而修正各单元的权值(其过程,是一个权值调整的过程)。
BP算法实现步骤(软件):1)初始化2)输入训练样本对,计算各层输出3)计算网络输出误差4)计算各层误差信号5)调整各层权值6)检查网络总误差是否达到精度要求满足,则训练结束;不满足,则返回步骤2)注:改进算法—增加动量项、自适应调整学习速率(这个似乎不错)及引入陡度因子。
爱发猫 www.aifamao.com。
BP神经网络是最基本、最常用的神经网络,Matlab有专用函数来建立、训练它,主要就是newff()、train()、sim()这三个函数,当然其他如归一化函数mapminmax()、其他net的参数设定(lr、goal等)设置好,就可以通过对历史数据的学习进行预测。
附件是一个最基本的预测实例,本来是电力负荷预测的实例,但具有通用性,你仔细看看就明白了。
额。。。一种启发式的改进就是,为学习速率选用自适应值,它依赖于连续迭代步骤中的误差函数值。
自适应调整学习速率的梯度下降算法,在训练的过程中,力图使算法稳定,同时又使学习的步长尽量地大,学习速率则是根据局部误差曲面作出相应的调整。
当误差以减小的方式趋于目标时,说明修正方向正确,于是步长(学习速率)增加,因此学习速率乘以增量因子Ir_inc,使学习速率增加;而当误差增加超过设定的值C倍时,说明修正过头,应减小步长,因此学习速率乘以减量因子Ir_dec,使学习速率减少.其他情况学习速率则不变。
Matlab里有对应的变学习速率的函数。
bpnet=newff(x,[60,4],{'logsig','logsig'},'traingda');%'traingda'表示自适应学习速率调整方法=50;=0.01;%预设值的学习速率bpnet.trainParam.epochs=3000;=0.247;bpnet.trainParam.Ir_inc=1.05;%增加的学习速率倍数,默认为1.05bpnet.trainParam.Ir_dec=0.7;%减少的学习速率倍数,默认为0.7bpnet.trainParam.max_perf_inc=1.04;%误差函数增加为迭代前的1.04时,减少学习速率。
默认为1.04[bpnet]=train(bpnet,p,t);savebpnet;%%%%%%%%%%%%%%%%%%%%。
matlab编写BP神经网络很方便的,这个工作不用像编程序的C什么的那样还要编写算法。这个算法早已经在软件的库里提供了。你只要用一条语句就出来了。把参数,深度和节点固定的往里一代数就可以了。
还有一点,注意最后结果的收敛性,神经网络发展一直是曲折前进的,为什么这样,现在不太给力,因为面临着一个收敛的问题,实现起来效果不好。这些程序网上有很多,你借一本基本的神经网络的书里面也有。望采纳。
。
使用神经网络工具箱可以非常简便地实现网络建立和训练,实例代码如下:%% BP算法function Out=bpnet(p,t,p_test)%p,t为样本需要提前组织好global S1net=newff(minmax(p),[S1,8],{'tansig','purelin'},'trainlm'); %trainlm训练函数最有效%net=newff(P,T,31,{'tansig','purelin'},'trainlm');%新版用法net.trainParam.epochs=1000;=0.00001;=0.01;net.trainParam.showWindow = false; %阻止训练窗口的弹出net.trainParam.showCommandLine = false; %阻止训练窗口的弹出net=train(net,p,t);Out=sim(net,p_test);end上面的代码不完整,完整的带训练样本数据的程序见附件。
。
%A百分含量[7.17.06.96.87.2]%B百分含量[3.23.43.63.84.0]%C百分含量[2.52.93.12.62.2]%%硬度[7865786972]%%P=[。
。。];输入T=[。。。
];输出clear;clc%数据A=[7.17.06.96.87.2];B=[3.23.43.63.84.0];C=[2.52.93.12.62.2];P=[A;B;C];T=[7865786972];%创建一个新的前向神经网络net_1=newff(minmax(P),[10,1],{'tansig','purelin'},'traingdm')%当前输入层权值和阈值{1,1}inputbias=net_1.b{1}%当前网络层权值和阈值{2,1}layerbias=net_1.b{2}%设置训练参数=50;=0.05;=0.9;net_1.trainParam.epochs=10000;=1e-3;%调用TRAINGDM算法训练BP网络[net_1,tr]=train(net_1,P,T);%对BP网络进行仿真A=sim(net_1,P);%计算仿真误差E=T-A;MSE=mse(E)x=[7.13.22.5]';%测试sim(net_1,x)。
P=[。。。];输入T=[。。。
];输出%创建一个新的前向神经网络net_1=newff(minmax(P),[10,1],,'traingdm')%当前输入层权值和阈值inputbias=net_1.b%当前网络层权值和阈值layerbias=net_1.b应该没问题吧。
% 计算S1与S2层的输出A1=tansig(W1*p,B1);t=purelin(W2*A1,B2);这就是p到t的映射关系。
BP(BackPropagation)神经网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。
BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。它的学习规则是使用最速下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小。
BP神经网络模型拓扑结构包括输入层(input)、隐层(hiddenlayer)和输出层(outputlayer)。