MATLAB BP网络工具箱中不同学习函数,训练函数和性能函数时的学习效率和精度

demo来自《神经网络理论与MATLAB7实现》

首先,介绍一下BP网络在MATLAB工具箱中常用的几类函数:

前向网络创建函数:

newcf   创建级联前向网络

newff   创建前向BP网络

newffd   创建存在输入延迟的前向网络

传递函数:

logsig   S型的对数函数

dlogsig   logsig的导函数

tansig   S型的正切函数

dtansig   tansig的导函数

purelin   纯线性函数

dpurelin   purelin的导函数

学习函数:

learngd   基于梯度下降法的学习函数

learngdm   梯度下降栋梁学习函数

训练函数:

trainbr Bayes  规范化BP训练函数

trainc   循环顺序渐增训练函数

traincgb   Powell-Beale连接梯度BP训练函数

traincgf   Fletcher-Powell连接梯度BP训练函数

traincgp   Polak-Ribiere连接梯度BP训练函数

traingda  自适应lrBP的梯度递减训练函数

traingdx   动量及自适应lrBP的梯度递减训练函数

trainlm   Levenberg-Marquardt BP训练函数

trainoss   一步正切BP训练函数

trainr   随机顺序递增更新训练函数

trainrp   带反弹的BP训练函数

trains   顺序递增BP训练函数

trainscg   量化连接梯度BP训练函数

性能函数:

mse  均方误差函数

msereg  均方误差规范化函数

显示函数:

plotperf  绘制网络的性能

plotes  绘制一个单独神经元的误差曲面

plotep  绘制权值和阈值在误差曲面的位置

errsurf  计算单个神经元的误差曲面



MATLAB BP网络工具箱中不同学习函数,训练函数和性能函数时的学习效率和精度

%% BP网络的一个重要功能就是非线性映射的能力,这个功能非常适用于函数的逼近等,也就是说,找出两组数据间的关系,本例比较BP网络中不同学习函数,和训
%% 练函数学习速率和精度
clc;close all;clear;
P=[0 1 2 3 4 5 6 7 8 9 10];
T=[0 1 2 3 4 3 2 1 2 3 4];
net=newff([0 10],[5,1],{'tansig','purelin'});
%net=newff([0 10],[5,1],{'tansig','purelin'},'traingd','learngd','msereg');
%net=newff([0 10],[5,1],{'tansig','purelin'},'traingdx','learngd','msereg');
net.trainParam.epochs=200;
net=train(net,P,T);
figure;
Y=sim(net,P);
plot(P,T,'+',P,Y,'o')

1.创建BP网络的学习函数,训练函数和性能函数都采用default值,分别为learngdm,trainlm和mse时的逼近结果:

训练得到的均方误差曲线(训练函数:trainlm):


训练后的网络输出:


由此可见,进过200次训练后,虽然网络的性能还没有为0,但是输出均方误差已经很小了,MSE=6.72804e-0.06,显示的结果也证明P和T之间非线性映射关系的拟合是非常精确的;


2.建立一个学习函数为learnd,训练函数为traingd,和性能函数为msereg的BP网络,来完成拟合任务:


网络的输出(训练函数:traingd):

可见,经过200次训练后,网络的输出误差比较大,而且网络误差的收敛速度非常慢。 这是由于训练函数traingd为单纯的梯度下降训练函数,训练速度比较慢,而且容易陷入局部最小的情况。结果显示网络精度确实比较差。

3.将训练函数修改为traingdx,该i函数也是梯度下降法训练函数,但是在训练过程中,他的学习速率是可变的

网络的训练误差曲线:

网络的输出(训练函数:traingdx)

在200次训练后,以msereg函数评价的网络性能为1.04725,已经不是很大,结果显示P和T之间非线性关系的拟合情况不错,网络的性能不错。

 
  
 
  
 
  
 
  
 
  
 
 

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