BP神经网络的函数逼近功能

BP网络有很强的映射能力,主要用于模式识别和函数逼近。可以采用BP网络函数逼近的能力来求解数学式难以表达的函数。下面是一个三层BP网络,看它如何逼近一个正旋函数的。
在matlab中采用tansig函数和purelin函数,BP网络未训练时(初始化的网络),输出曲线与正旋曲线相差很大,没有逼近功能。因为newff函数建立网络时,权值和阀值都是随即初始化的。网络输出结果很差。达不到逼近目的。
k=1;
p=[-1:.05:1];
t=sin(k*pi*p);
n=10;
net=newff(minmax(p),[n,1],{'tansig' 'purelin'},'trainlm');
y1=sim(net,p);
plot(p,t,'-',p,y1,'--');
xlabel('时间');
ylabel('函数值');
title('未训练的BP网络逼近效果');
legend('要逼近的正旋函数曲线','未训练的BP网络逼近曲线');

BP神经网络的函数逼近功能_第1张图片

下面对网络训练。设置训练时间为1000,训练精度为0.01。其余为缺省值带动量梯度下降改进型训练函数traingdm训练得到的误差变化和函数逼近效果如下。
net=newff(minmax(p),[n,1],{'tansig' 'purelin'},'traingdm');
net.trainParam.epochs=1000;
net.trainParam.goal=0.01;
net=train(net,p,t);
y2=sim(net,p);
plot(p,t,'-',p,y1,'--',p,y2,'.');
legend('要逼近的正旋函数曲线','未训练的BP网络逼近曲线','训练后的BP网络逼近曲线');
xlabel('时间');
ylabel(' 函数值 ');

BP神经网络的函数逼近功能_第2张图片

BP神经网络的函数逼近功能_第3张图片

          可见,带动量梯度下降改进型训练函数traingdm训练得到BP网络函数逼近效果很好。

你可能感兴趣的:(Windows编程)