demo来自《神经网络理论与MATLAB7实现》
newcf 创建级联前向网络
newff 创建前向BP网络
newffd 创建存在输入延迟的前向网络
logsig S型的对数函数
dlogsig logsig的导函数
tansig S型的正切函数
dtansig tansig的导函数
purelin 纯线性函数
dpurelin purelin的导函数
learngd 基于梯度下降法的学习函数
learngdm 梯度下降栋梁学习函数
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 计算单个神经元的误差曲面
%% 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')
训练得到的均方误差曲线(训练函数:trainlm):
训练后的网络输出:
由此可见,进过200次训练后,虽然网络的性能还没有为0,但是输出均方误差已经很小了,MSE=6.72804e-0.06,显示的结果也证明P和T之间非线性映射关系的拟合是非常精确的;