BP神经网络matlab实现

BP网络里采用的传递函数有:logsig(),tansig(),purelin();
BP神经网络训练函数


1. traingd:批梯度下降训练函数,沿网络性能参数的负梯度方向调整网络的权值和阈值.
2. traingdm:动量批梯度下降函数,也是一种批处理的前馈神经网络训练方法,不但具有更快的收敛速度,而且引入了一个动量项,有效避免了局部最小问题在网络训练中出现.
3. trainrp:有弹回的BP算法,用于消除梯度模值对网络训练带来的影响,提高训练的速度.(主要通过delt_inc和delt_dec来实现权值的改变)
4. trainlm:Levenberg-Marquardt算法,对于中等规模的BP神经网络有最快的收敛速度,是系统默认的算法.由于其避免了直接计算赫赛矩阵,从而减少了训练中的计算量,但需要较大内存量.
5. traincgb:Plwell-Beale算法:通过判断前后梯度的正交性来决定权值和阈值的调整方向是否回到负梯度方向上来.
6. trainscg:比例共轭梯度算法:将模值信赖域算法与共轭梯度算法结合起来,减少用于调整方向时搜索网络的时间.

一般来说,traingd和traingdm是普通训练函数,而traingda,traingdx,traingd,trainrp,traincgf,traincgb,trainscg,trainbgf等等都是快速训练函数.总体感觉就是训练时间的差别比较大,还带有精度的差异.

[x,t] = simplefit_dataset;		% MATLAB自带数据,x、t均为1*94向量
net = feedforwardnet;			% 创建前向网络feedforwardnet(5) 隐藏神经元个数 默认10
view(net)
net = train(net,x,t);			% 训练,确定输入输出向量的维度
view(net)
y = net(x);                     %y = sim(net,x);
perf = perform(net,y,t)			% 计算误差性能
plot(x,t,'o-');					% 绘图
hold on;
plot(x,y,'*-k');
legend('原始数据','feedforwardnet结果BP神经网络')

P = [0 1 2 3 4 5 6 7 8 9 10];	% 网络输入
T = [0 1 2 3 4 3 2 1 2 3 4];	% 期望输出
f1=feedforwardnet(4);
%f1=feedforwardnet([3,5]);
f2=cascadeforwardnet([3,5]);
f1 = train(f1,P,T);	
f2 = train(f2,P,T);	
Y1 = sim(f1,P);	
Y2 = sim(f2,P);	
plot(P,T,'o-');					% 绘图
hold on;
plot(P,Y1,'^m-');
plot(P,Y2,'*-k');
legend('原始数据','feedforwardnet结果BP神经网络','cascadeforwardnet结果级联前向网络',0)


你可能感兴趣的:(神经网络)