摘要:
采用BP神经网络拟合目标函数,并添加高斯随机噪声,通过使用feedforwardnet函数构建BP神经网络进行函数拟合。通过调试设定的参数及所使用的训练函数,得出结论:BP神经网络可以较好地解决黑盒问题。且随着设定参数的提升及采用的训练函数的改变,会对BP神经网络的拟合效果造成较大的影响,因此要想得到较好的拟合效果,需要设定合适的训练参数及采用对应情况下的训练函数。
1.1 BP神经网络原理
BP神经网络是一种按误差反向传播(简称误差反传)训练的多层前馈网络,其算法称为BP算法,它的基本思想是梯度下降法,利用梯度搜索技术,以期使网络的实际输出值和期望输出值的误差均方差为最小。
基本BP算法包括信号的前向传播和误差的反向传播两个过程:即计算误差输出时按从输入到输出的方向进行,而调整权值和阈值则从输出到输入的方向进行。正向传播时,输入信号通过隐含层作用于输出节点,经过非线性变换,产生输出信号,若实际输出与期望输出不相符,则转入误差的反向传播过程。误差反传是将输出误差通过隐含层向输入层逐层反传,并将误差分摊给各层所有单元,以从各层获得的误差信号作为调整各单元权值的依据。通过调整输入节点与隐层节点的联接强度和隐层节点与输出节点的联接强度以及阈值,使误差沿梯度方向下降,经过反复学习训练,确定与最小误差相对应的网络参数(权值和阈值),训练即告停止。此时经过训练的神经网络即能对类似样本的输入信息,自行处理输出误差最小的经过非线形转换的信息。
1.2 实验步骤
步骤一:从目标函数 y=sin(x)*ln(x)上随机取样 2000 个点,其中 x 值的范围为[0,20]。加入最大值为 0.1 的高斯随机噪声;
步骤二:利用 feedforwardnet 函数构建 4 层神经网络(1 层输入层, 2 层隐藏层分别包含 30/15 个神经元, 1 层输出层);
步骤三:将隐藏层的激活函数设置为 tansig,训练算法采用 trainlm,目标误差为 0.001,学习率为 0.01,最大迭代次数为 2000;
步骤四:训练网络,得到预测值,将预测值和实际值绘制到一张二维图上,输出拟合准确率。
源代码如下:
%% 采用feedforwardnet构建BP神经网络进行函数拟合
%% 清理参数及原始变量
clear al1;
close all;
clc;
%% 生成数据集,从目标函数上采样2000个点
x=rand(1,2000)*20;
x=sort(x);
y=sin(x).*log(x)+0.1.*randn(1,2000);
%% 神经网络拟合目标函数
net=feedforwardnet([20,10],'trainrp');
net.trainparam.show=50;
net.trainparam.epochs=2000;
net.trainparam.goal=1e-3;
net.trainParam.lr=0.01;
net=train(net,x,y);
view(net)
y1=net(x);
%% 统计拟合正确率(95%置信区间)
n=length(y1);
hitNum=0;
for i=1:n
if(abs((y(1,i)-y1(1,i))/y(1,i))<=0.05)
hitNum=hitNum+1;

最低0.47元/天 解锁文章
3万+





