BP神经网络拟合函数

摘要:

        采用BP神经网络拟合目标函数y=sin(x)\times ln(x),并添加高斯随机噪声,通过使用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; 
    end
end
sprintf('正确识别率是 %3.2f%%',100*hitNum/n)

%% 绘制对比图
plot(x,y,'r*');
hold on;
plot(x, y1,'g-','linewidth',1.5);
title(['训练函数:trainrp' '       ' '训练精度:0.001' '       ' '第1层隐藏层神经元个数:20' '       ' '第2层隐藏层神经元个数:10' '       ' '拟合正确率:' num2str(100*hitNum/n) '%']);

1.3 实验结果

        隐藏层激活函数设置为 tansig,2层隐藏层分别包含2/1个神经元,训练算法采用 trainlm,目标误差为 0.001,学习率为 0.01,最大迭代次数为 2000时,实验结果如下图所示:

图1.1

        隐藏层激活函数设置为 tansig,2层隐藏层分别包含6/3个神经元,训练算法采用 trainlm,目标误差为 0.001,学习率为 0.01,最大迭代次数为 2000时,实验结果如下图所示:

图1.2    

        隐藏层激活函数设置为 tansig,2层隐藏层分别包含10/5个神经元,训练算法采用 trainlm,目标误差为 0.001,学习率为 0.01,最大迭代次数为 2000时,实验结果如下图所示:

图1.3

        隐藏层激活函数设置为 tansig,2层隐藏层分别包含20/10个神经元,训练算法采用 trainlm,目标误差为 0.001,学习率为 0.01,最大迭代次数为 2000时,实验结果如下图所示:

图1.4

        隐藏层激活函数设置为 tansig,2层隐藏层分别包含20/10个神经元,训练算法采用 trainlm,目标误差为 0.1,学习率为 0.01,最大迭代次数为 2000时,实验结果如下图所示:

图1.5

        隐藏层激活函数设置为 tansig,2层隐藏层分别包含20/10个神经元,训练算法采用 trainlm,目标误差为 0.01,学习率为 0.01,最大迭代次数为 2000时,实验结果如下图所示:

图1.6      

        隐藏层激活函数设置为 tansig,2层隐藏层分别包含20/10个神经元,训练算法采用 trainlm,目标误差为 0.001,学习率为 0.01,最大迭代次数为 2000时,实验结果如下图所示:

图1.7

        隐藏层激活函数设置为 tansig,2层隐藏层分别包含20/10个神经元,训练算法采用 trainbr,目标误差为 0.001,学习率为 0.01,最大迭代次数为 2000时,实验结果如下图所示:

图1.8

        隐藏层激活函数设置为 tansig,2层隐藏层分别包含20/10个神经元,训练算法采用 trainrp,目标误差为 0.001,学习率为 0.01,最大迭代次数为 2000时,实验结果如下图所示:

图1.9

1.4 不同参数下的结果与分析

训练函数

训练精度

第1层隐藏层

神经元个数

第2层隐藏层

神经元个数

拟合正确率

trainlm

0.001

2

1

3.40%

trainlm

0.001

6

3

45.25%

trainlm

0.001

10

5

41.95%

trainlm

0.001

20

10

46.10%

trainlm

0.1

20

10

34.90%

trainlm

0.01

20

10

42.60%

trainlm

0.001

20

10

46.05%

trainbr

0.001

20

10

47.80%

trainrp

0.001

20

10

40.85%

表1

        从表1中不同参数下得到的结果可以看出:

        针对复合函数的拟合,采用feedforwardnet函数构建BP神经网络可以得到较好的拟合曲线,由于添加高斯随机噪声,所以拟合正确率不能达到很高,但是拟合出来的曲线可以较好地反映出目标函数的变化趋势。

        同时,观察不同参数下得到的结果可以发现,随着隐藏层神经元数量的增加,BP神经网络拟合曲线的效果也越来越好,但是当神经元达到一定的数量时,拟合效果会达到一个瓶颈,不能再有显著提升;随着训练精度的不断提高,BP神经网络拟合曲线的效果也越来越好;不同的训练函数有各自的的特点:

        (1)trainlm函数是Levenberg-Marquardt算法,对于中等规模的BP神经网络有最快的收敛速度,是系统默认的算法。由于其避免了直接计算赫赛矩阵,从而减少了训练中的计算量,但需要较大内存量;

        (2)trainbr函数是在Levenberg-Marquardt算法的基础上进行修改,以使网络的泛化能力更好,同时降低了确定最优网络结构的难度;

        (3)trainrp函数是有弹回的BP算法,用于消除梯度模值对网络训练带来的影响,提高训练的速度(主要通过delt_inc和delt_dec来实现权值的改变。

        由于BP神经网络能够较为方便的解决黑盒问题,它被广泛用于解决各种问题。神经网络的效果及收敛取决于所采用数据集、设定的参数及采用的训练函数。

  • 11
    点赞
  • 114
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
BP神经网络是一种常用的神经网络算法,通过反向传播算法可以对数据进行拟合和预测。利用数据进行BP神经网络拟合,需要进行以下步骤: 第一步: 准备数据。 拟合过程基于数据,因此首先需要准备好数据。数据可以是来自各种来源的实际观测数据,也可以是经过模拟生成的数据。 第二步: 网络设计。 BP神经网络拟合需要设计一个合适的神经网络模型。这包括定义神经元的数量、层数、激活函数的选择等。 第三步: 属性选择。 选择输入数据中的特征,这些特征将作为神经网络的输入变量。属性选择的好坏直接影响神经网络拟合效果。 第四步: 数据归一化。 进行数据归一化处理可以提高神经网络拟合精度,可行的方法有最小-最大归一化、z-score标准化等。 第五步: 网络训练。 网络训练是神经网络拟合的核心,通过反向传播算法,不断调整神经网络中各层的连接权值,使目标函数误差逐渐降低。 第六步: 模型评估。 利用测试集进行模型评估,可以得出神经网络拟合的精度和误差等指标。如果在测试集上表现良好,则可以使用该模型进行预测。 综上所述,利用数据进行BP神经网络拟合需要经过一系列步骤,包括准备数据、网络设计、属性选择、数据归一化、网络训练和模型评估等。只有在这些步骤都得到合理的处理和优化,才能获得较高的拟合精度和预测能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值