摘要:

采用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:nif(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神经网络能够较为方便的解决黑盒问题,它被广泛用于解决各种问题。神经网络的效果及收敛取决于所采用数据集、设定的参数及采用的训练函数。

BP神经网络拟合函数相关推荐

  1. 《MATLAB 神经网络43个案例分析》:第3章 遗传算法优化BP神经网络——非线性函数拟合

    <MATLAB 神经网络43个案例分析>:第3章 遗传算法优化BP神经网络--非线性函数拟合 1. 前言 2. MATLAB 仿真示例 3. 小结 1. 前言 <MATLAB 神经网 ...

  2. Matlab BP神经网络拟合四足机器人足端轨迹线积分方程反函数用于足端轨迹规划

    Matlab BP神经网络拟合四足机器人足端轨迹线积分方程用于足端轨迹规划 问题描述 一般情况下,在对四足机器人足端轨迹进行规划时分别对足端路径和轨迹加速度进行规划,然后将规划好的加速度进行两次积分得 ...

  3. BP神经网络非线性函数拟合

    基于BP神经网络的非线性函数拟合算法流程可以分为BP神经网络构建.BP神经网络训练和BP神经网络预测三步. BP神经网络构建:根据拟合非线性函数特点确定BP神经网络结构. BP神经网络训练:用非线性函 ...

  4. 神经网络拟合函数表达式,神经网络拟合效果不好

    神经网络,什么过拟合?,什么是欠拟合? 欠拟合是指模型不能在训练集上获得足够低的误差.而过拟合是指训练误差和测试误差之间的差距太大.考虑过多,超出自变量的一般含义维度,过多考虑噪声,会造成过拟合. 可 ...

  5. bp神经网络训练函数选择,BP神经网络训练过程

    BP神经网络的训练集需要大样本吗?一般样本个数为多少? BP神经网络的训练集需要大样本吗?一般样本个数为多少? BP神经网络样本数有什么影响学习神经网络这段时间,有一个疑问,BP神经网络中训练的次数指 ...

  6. matlab BP神经网络 newff函数官方源码

    最近在学习BP神经网络,想要自定义神经网络内部,但是网上找了很久都没有找到源代码,于是自己去搬运了一波matlab官方的源代码. 不多说,直接上代码,未编辑过的源码: function out1 = ...

  7. bp神经网络训练结果怎么看,BP神经网络训练函数

    神经网络算法中什么是训练集,什么是测试集?以及其各对应的作用?本人新手,望高手指 机器学习中训练集.验证集.测试集的定义和作用到底是什么样的? AI爱发猫 www.aifamao.com. 下面是一些 ...

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

    BP网络有很强的映射能力,主要用于模式识别和函数逼近.可以采用BP网络函数逼近的能力来求解数学式难以表达的函数.下面是一个三层BP网络,看它如何逼近一个正旋函数的. 在matlab中采用tansig函 ...

  9. 神经网络控制与matlab仿真,matlab神经网络拟合预测

    matlab中如何用神经网络求得数据拟合函数? 谷歌人工智能写作项目:小发猫 用MATLAB神经网络进行函数拟合后,拟合的函数表达式有吗? 常见的神经网络结构. 神经网络一般是没有表达式的哈,但是只要 ...

  10. matlab神经网络(二)-bp神经网络,MATLAB神经网络(2) BP神经网络的非线性系统建模——非线性函数拟合...

    2.1 案例背景 在工程应用中经常会遇到一些复杂的非线性系统,这些系统状态方程复杂,难以用数学方法准确建模.在这种情况下,可以建立BP神经网络表达这些非线性系统.该方法把未知系统看成是一个黑箱,首先用 ...

最新文章

  1. win10 输入法不见了、繁体 问题解决
  2. Could not get lock /var/lib/dpkg/lock-frontend
  3. 半编译半解释的Java语言和C++、Python等语言的区别
  4. python 列表加入_加入python中的列表列表
  5. java 面相,java学习17-面相对象(多态)
  6. CentOS下设置vim的tab键为4格
  7. task2 EDA探索性数据分析
  8. 获取页面中超链接数量_微信订阅号自定义菜单添加页面模板使用教程。
  9. java用cookie最新浏览商品_jQuery.cookie.js实现记录最近浏览过的商品功能示例
  10. 1.2w星!火爆GitHub的Python学习100天刷爆朋友圈!
  11. 关于Oracle返回值
  12. android游戏boss坐标,混沌与秩序2已知boss刷新点分布图详解(已更新到20号boss)...
  13. 193.有效电话号码
  14. 【Chia开发文档】Offer 类的属性、使用方法、作用及返回值
  15. 计算机化分析原理波涛,(波涛)证券期货投资计算机化技术分析原理OCR.pdf
  16. The command ‘docker‘ could not be found in this WSL 2 distro.
  17. 想知道如何图片转文字?这几个方法你别错过
  18. Linux权限详解(chmod、600、644、700、711、755、777、4755、6755、7755)
  19. 无法将win10配置在此计算机硬件上运行,WIN10系统备份 提示:无法将系统映像保存在计算机从中启动或安装WIDOWS的驱动器上...
  20. 计算机看游戏显卡,电脑怎么看显卡参数_小编教你查看电脑显卡参数的方法-系统城...

热门文章

  1. vsftpd配置系统用户为登陆用户
  2. C语言再学习 -- ASCII码表(转)
  3. matlab legend下划线,MATLAB 画图 legend
  4. 数据库系统工程师学习记录(计算机系统知识)
  5. eclipse 2020版 安装与配置完美教程
  6. matlab算系统阻抗,基于MatlabRF系统阻抗匹配设计.pdf
  7. 机器视觉硬件选型相关知识
  8. 树莓派基础实验9:蜂鸣器实验
  9. 药店零售管理php系统,医药POS零售管理系统
  10. 2021美亚团队赛复盘