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进行仿真,设置隐藏层神经元数目为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神经网络工具箱及其在函数逼近中的应用的更多相关文章
- [matlab]bp神经网络工具箱学习笔记
基本就三个函数: newff():创建一个bp神经网络 train():训练函数 sim():仿真函数 同时具有可视化界面,但目前不知道可视化界面如何进行仿真,且设置不太全 工具箱:Neural ne ...
- Matlab实现BP神经网络预测(附实例数据及代码)
BP神经网络介绍 神经网络是机器学习中一种常见的数学模型,通过构建类似于大脑神经突触联接的结构,来进行信息处理.在应用神经网络的过程中,处理信息的单元一般分为三类:输入单元.输出单元和隐含单元. 顾名 ...
- BP神经网络及其在教学质量评价中 的应用
本文学习笔记是自己的理解,如有错误的地方,请大家指正批评.共同进步.谢谢! 之前的教学质量评价,仅仅是通过对教学指标的简单处理.如求平均值或人为的给出各指标的权值来加权求和,其评价结果带有非常大主观性 ...
- 基于Matlab实现多次最佳一致的函数逼近(类似求渐进函数)
%%%做系统识别很重要,方法上完全符合系统识别最基础的理论 function [sun]=main(n) fplot(,],'r'); x=ones(n+,); :n+ x(j+)=cos(pi*(n ...
- MATLAB神经网络(2) BP神经网络的非线性系统建模——非线性函数拟合
2.1 案例背景 在工程应用中经常会遇到一些复杂的非线性系统,这些系统状态方程复杂,难以用数学方法准确建模.在这种情况下,可以建立BP神经网络表达这些非线性系统.该方法把未知系统看成是一个黑箱,首先用 ...
- 神经网络中的BP神经网络和贝叶斯
1 贝叶斯网络在地学中的应用 1 1.1基本原理及发展过程 1 1.2 具体的研究与应用 4 2 BP神经网络在地学中的应用 6 2.1BP神经网络简介 6 2.2基本原理 7 2.3 在地学中的具体 ...
- 【转载】BP神经网络
原文地址:http://blog.csdn.net/acdreamers/article/details/44657439 今天来讲BP神经网络,神经网络在机器学习中应用比较广泛,比如函数逼近,模式识 ...
- 三.BP神经网络
BP神经网络是包含多个隐含层的网络,具备处理线性不可分问题的能力.以往主要是没有适合多层神经网络的学习算法,,所以神经网络的研究一直处于低迷期. 20世纪80年代中期,Rumelhart,McClel ...
- MATLAB神经网络(3) 遗传算法优化BP神经网络——非线性函数拟合
3.1 案例背景 遗传算法(Genetic Algorithms)是一种模拟自然界遗传机制和生物进化论而形成的一种并行随机搜索最优化方法. 其基本要素包括:染色体编码方法.适应度函数.遗传操作和运行参 ...
随机推荐
- 排序之冒泡排序(bubblesort)
package com.pailian; /* * 冒泡排序 * 比较相邻的俩位数,这样每轮比较都会出现一个最大值或最小值 * 下一轮比较就会减少一次(因为已经知道了一个最大值或最小值) * 注意根据 ...
- django框架配置mysql数据库
django配置mysql数据库: 1.首先更改django项目文件中的settings.py的数据库配置 DATABASES = { 'default': { 'ENGINE': 'django.d ...
- 安装完Ubuntu后要做的事情
Ubuntu 16.04安装完成后,还需要做一些配置才能愉快的使用,所以装完系统后还要进行一系列的优化. 1.删除libreoffice libreoffice虽然是开源的,但是Java写出来的off ...
- Linq To Object 函数介绍
static void Main(string[] args) { #region Aggregate 把集合中的元素按照表达式依次执行 { IEnumerable<int> list = ...
- 用mongols轻松打造websocket应用
用websocket做聊天系统是非常合适的. mongols是一个运行于linux系统之上的开源c++库,可轻松开启一个websocket服务器. 首先,build一个websocket服务器. #i ...
- 用JavaScript写一个简单的计算器
本文使用js实现了一个简单的加.减.乘.除计算器. 以下是css部分代码: *{ padding:0; margin:0; color: #424242; } .outer{ width:300px; ...
- flutter -webview 报错 err_cleartext_not_permitted
文件 android\app\src\main\AndroidManifest.xml <manifest xmlns:android="http://schemas.android. ...
- 自制操作系统Antz(13) 显示图片
显示图片只是在多媒体课上看着bmp格式图片的突发奇想,然后就实现在了我自己的操作系统 Antz系统更新地址 Linux内核源码分析地址 Github项目地址 效果图: 显示图片的原理 在之前显卡操作时 ...
- 算法(第四版)C# 习题题解——1.4
写在前面 整个项目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 这一节内容可能会用到的库文件有 ...
- ERROR: Got error reading packet from server: A slave with the same server_uuid/server_id as this slave has connected to the master
centos7.5 做binlog-server,拉取主库binlog报错 问题: [root@db03-53 binlog]# mysqlbinlog -R --host=10.0.0.55 --u ...