Matlab的BP神经网络工具箱及其在函数逼近中的应用
Posted dlb511
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Matlab的BP神经网络工具箱及其在函数逼近中的应用相关的知识,希望对你有一定的参考价值。
1.神经网络工具箱概述
Matlab神经网络工具箱几乎包含了现有神经网络的最新成果,神经网络工具箱模型包括感知器、线性网络、BP网络、径向基函数网络、竞争型神经网络、自组织网络和学习向量量化网络、反馈网络。本文只介绍BP神经网络工具箱。
2.BP神经网络工具箱介绍
BP神经网络学习规则是不断地调整神经网络的权值和偏值,使得网络输出的均方误差和最小。下面是关于一些BP神经网络的创建和训练的名称:
(1)newff:创建一前馈BP网络(隐含层只有一层)
(2)newcf:创建一多层前馈BP网络(隐含层有多层)
(3)train:训练一个神经网络
(4)sim:仿真一个神经网络
以上几个是最主要的语句,在后面的实例应用中会详细说明用法。
3.BP神经网络工具箱在函数逼近中的应用
BP神经网络具有很强的映射能力,主要用于模式识别分类、函数逼近、函数压缩等。下面通过实例来说明BP网络在函数逼近方面的应用。
本文需要逼近的函数是f(x)=1+sin(k*pi/2*x),其中,分别令k=2、3、6进行仿真,设置隐藏层神经元数目为n,n可以改变,便于后面观察隐藏层节点与函数逼近能力的关系。
3.1 k=2,n=5时的仿真实验
先作出目标曲线的图形,以下为matlab代码:
clear all clc %%%%%%%%%%设置网络输入值和目标值%%%%%%%%%% k=2;%f(x)中的k值 x=[-1:.05:8]; f=1+sin(k*pi/2*x); plot(x,f,‘-‘); title(‘要逼近的非线性函数‘); xlabel(‘时间‘); ylabel(‘非线性函数‘);
接着用newff函数建立BP神经网络结构,以下为matlab代码:
%%%%%%%%%%建立网络%%%%%%%%%% n=5;%隐藏层节点数 net = newff(minmax(x),[n,1],{‘tansig‘ ‘purelin‘},‘trainlm‘); %对于初始网络,可以应用sim()函数观察网络输出。 y1=sim(net,x); figure; plot(x,f,‘-‘,x,y1,‘:‘) title(‘未训练网络的输出结果‘); xlabel(‘时间‘); ylabel(‘仿真输出--原函数-‘);
代码中的tansig和purelin分别是输入层到隐藏层和隐藏层到输出层的激活函数,trainlm是训练函数(Levenberg-Marquardt算法训练BP网络)
仿真效果如下:
我们可以看到仿真的函数与目标函数相差甚远,这是因为使用newff()函数建立函数网络时,权值和阈值的初始化是随机的,所以网络输出结构很差,根本达不到函数逼近的目的。
因此接下来应用train()函数对网络进行训练后再进行仿真。训练之前,需要预先设置网络训练参数,这里只设置了训练的迭代次数和训练精度,其余参数使用默认值。训练神经网络的matlab代码如下:
%%%%%%%%%%设置训练网络参数%%%%%%%%%%
net.trainParam.epochs=200; %网络最大迭代次数设置为200
net.trainParam.goal=0.2; %网络训练精度设置为0.2
net=train(net,x,f); %开始训练网络;
训练后 得到的误差变化过程如下图所示,可以看出,在运行到第145步时,网络输出误差达到设定的训练精度。
训练好的网络进行仿真,代码如下:
%%%%%%%%%%仿真网络%%%%%%%%%% y2=sim(net,x); figure; plot(x,f,‘-‘,x,y1,‘:‘,x,y2, ‘--‘) title(‘训练后网络的输出结果‘); xlabel(‘时间‘); ylabel(‘仿真输出‘);
绘制网络输出曲线,与目标曲线和未训练网络的输出结果相比较,如下图所示:
由此可以看出,与未训练的曲线相比,经过训练之后的曲线和目标曲线更接近,这说明BP网络对非线性函数的逼近效果比较好。
接下来通过改变隐藏层的节点数来看其对网络逼近的效果
3.2 k=2,n=3、n=10时的仿真实验
将隐藏层节点数改为3,其他条件不变,仿真效果如下:
将隐藏层节点数改为10,其他条件不变,仿真效果如下:
由以上两张图可以看出,当n=10时,经过训练后的曲线基本跟目标曲线重合;当n=3时,逼近效果却很差,这说明改变隐藏层节点数对函数逼近的效果有一定影响。
4.总结
一般来说,隐藏层神经元数目越多,则BP网络逼近非线性函数的能力越强。由于本例中单隐含层的输入层和输出层神经元个数均为1,那么隐含层的个数可以根据设计
经验公式和该问题的实际情况相结合,通过实验选取最好的隐藏层节点数,使得逼近效果最佳。
以上是关于Matlab的BP神经网络工具箱及其在函数逼近中的应用的主要内容,如果未能解决你的问题,请参考以下文章
基于蝙蝠算法优化BP神经网络的数据分类算法及其MATLAB实现-附代码
数据预测基于matlab粒子群算法优化RBF神经网络数据预测含Matlab源码 476期