RBF神经网络原理和matlab实现

news2024/12/29 16:46:31

1.案例背景

1.1 RBF神经网络概述    

        径向基函数(Radical Basis Function,RBF)是多维空间插值的传统技术,由Powell于1985年提出。1988年, Broomhead和 Lowe根据生物神经元具有局部响应这一特点,将 RBF引入神经网络设计中,产生了RBF神经网络。1989 年,Jackson论证了RBF 神经网络对非线性连续函数的一致逼近性能。
        RBF神经网络属于前向神经网络类型,网络的结构与多层前向网络类似,是一种三层的前向网络。第一层为输入层,由信号源结点组成;第二层为隐藏层﹐隐藏层节点数视所描述问题的需要而定,隐藏层中神经元的变换函数即径向基函数是对中心点径向对称且衰减的非负非线性函数,该函数是局部响应函数,而以前的前向网络变换函数都是全局响应的函数;第三层为输出层,它对输入模式作出响应。
        RBF网络的基本思想是:用RBF作为隐单元的“基”构成隐藏层空间,隐含层对输入矢量进行变换,将低维的模式输入数据变换到高维空间内,使得在低维空间内的线性不可分的问题在高维空间内线性可分。
        RBF神经网络结构简单、训练简洁而且学习收敛速度快,能够逼近任意非线性函数,因此它已被广泛应用于时间序列分析、模式识别、非线性控制和图形处理等领域。

1.2 RBF神经网络结构模型

        径向基神经网络的神经元模型如图7-1所示。径向基神经网络的节点激活函数采用径向基函数,通常定义为空间任一点到某一中心之间的欧式距离的单调函数。

由        图7-1所示的径向基神经元结构可以看出,径向基神经网络的激活函数是以输人向量和权值向量之间的距离||dist||作为自变量的。径向基神经网络的激活函数的一般表达式为

        随着权值和输入向量之间距离的减少,网络输出是递增的,当输入向量和权值向量一致时,神经元输出为1。图中的b为阈值,用于调整神经元的灵敏度。利用径向基神经元和线性神经元可以建立广义回归神经网络,此种神经网络适用于函数逼近方面的应用;径向基神经元和竞争神经元可以建立概率神经网络,此种神经网络适用于解决分类问题。
        由输入层、隐藏层和输出层构成的一般径向基神经网络结构如图7-2所示。在 RBF 神经网络中,输入层仅仅起到传输信号的作用,与前面所讲述的神经网络相比较,输人层和隐含层之间可以看作连接权值为1的连接,输出层和隐含层所完成的任务是不同的,因而它们的学习策略也不相同。输出层是对线性权进行调整,采用的是线性优化策略,因而学习速度较快。而隐含层是对激活函数(格林函数或高斯函数,一般取高斯函数)的参数进行调整,采用的是非线性优化策略,因而学习速度较慢。

1.3 RBF神经网络的学习算法

        RBF神经网络学习算法需要求解的参数有3个:基函数的中心、方差以及隐含层到输出层的权值。根据径向基函数中心选取方法的不同,RBF 网络有多种学习方法,如随机选取中心法、自组织选取法、有监督选取中心法和正交最小二乘法等。下面将介绍自组织选取中心的RBF神经网络学习法。该方法由两个阶段组成;一是自组织学习阶段,此阶段为无导师学过程,求解隐含层基函数的中心与方差;二是有导师学习阶段,此阶段求解隐含层到输出层间的权值。
        径向基神经网络中常用的径向基函数是高斯函数,因此径向基神经网络的激活函数可表示为

1.4曲线拟合相关背景

        曲线拟合(curve fitting)是用连续曲线近似地刻画或比拟平面上离散点组所表示的坐标之间函数关系的一种数据处理方法,是用解析表达式逼近离散数据的一种方法。在科学实验或社会活动中,通过实验或观测得到量α与y的一组数据对(xi,yi)(i=1,2,…,m),其中x是彼此不同的。人们希望用一类与数据的背景材料规律相适应的解析表达式如y=f(z,c)来反映量x与y之间的依赖关系,即在一定意义下“最佳”地逼近或拟合已知数据。y=f(r,c)常被称作拟合模型,式中 c=(c1 ,c2…,cn)是一些待定参数。当c在f中线性出现时,此时称模型f为线性模型,否则称f为非线性模型。现在有许多衡量拟合优度的标准, 最常用的一种做法是选择参数c使得拟合模型与实际观测值在各点的残差(或离差)ek=yk- f(xk,c)
加权平方和达到最小,此时所求曲线称作仕加仪取小一水应入加太想阳立确定参数,从而求许多求解拟合曲线的成功方法,对于线性模型一般趣过建且N水胖月性组不明步参黝才得拟合曲线。至于非线性模型,则要借助求解非线性方程组或用最优化方法求得所需参数才能得到拟合曲线,有时也称之为非线性最小二乘拟合。

        本例用RBF网络拟合未知函数,预先设定一个非线性函数,如式(7-1)所示,假定函数解析式不清楚的情况下,随机产生x1,x2和由这两个变量按式(7-1)得出的y。将x1,x2作RBF网络的输人数据,将y作为RBF 网络的输出数据,分别建立近似和精确RBF网络进行回归分析,并评价网络拟合效果。
        在使用精确(exact)径向基网络来实现非线性函数的回归例子中,共产生了301个样本﹐全部作为网络的训练样本,使用图形可视化来观察拟合效果。
        在使用近似(approximate)径向基网络对同一函数进行拟合的例子中,共产生了400个训练数据和961个验证数据,使用400个训练数据训练RBF网络后,使用训练好的网络来预测961个验证数据的结果,并通过可视化的方法观察RBF神经网络的拟合效果。

2 MATLAB 实现

2.1 RBF网络的相关函数

 

 2.2 matlab代码

1)严格(Exact)径向基网络来实现非线性的函数回归

%% Matlab神经网络43个案例分析

 
%% 清空环境变量
clc
clear

%% 产生输入 输出数据 
% 设置步长 
interval=0.01;

% 产生x1 x2
x1=-1.5:interval:1.5;
x2=-1.5:interval:1.5;

% 按照函数先求得相应的函数值,作为网络的输出。
F =20+x1.^2-10*cos(2*pi*x1)+x2.^2-10*cos(2*pi*x2); 

%% 网络建立和训练
% 网络建立 输入为[x1;x2],输出为F。Spread使用默认。
net=newrbe([x1;x2],F)

%% 网络的效果验证

% 我们将原数据回带,测试网络效果:
ty=sim(net,[x1;x2]);

% 我们使用图像来看网络对非线性函数的拟合效果
figure
plot3(x1,x2,F,'rd');
hold on;
plot3(x1,x2,ty,'b-.');
view(113,36)
title('可视化的方法观察准确RBF神经网络的拟合效果')
xlabel('x1')
ylabel('x2')
zlabel('F')
grid on 

 2)RBF网络对同一函数拟合

%% Matlab神经网络43个案例分析
%% 清空环境变量
clc
clear
%% 产生训练样本(训练输入,训练输出)
% ld为样本例数
ld=400; 

% 产生2*ld的矩阵 
x=rand(2,ld); 

% 将x转换到[-1.5 1.5]之间
x=(x-0.5)*1.5*2; 

% x的第一行为x1,第二行为x2.
x1=x(1,:);
x2=x(2,:);

% 计算网络输出F值
F=20+x1.^2-10*cos(2*pi*x1)+x2.^2-10*cos(2*pi*x2);

%% 建立RBF神经网络 
% 采用approximate RBF神经网络。spread为默认值
net=newrb(x,F);

%% 建立测试样本

% generate the testing data
interval=0.1;
[i, j]=meshgrid(-1.5:interval:1.5);
row=size(i);
tx1=i(:);
tx1=tx1';
tx2=j(:);
tx2=tx2';
tx=[tx1;tx2];

%% 使用建立的RBF网络进行模拟,得出网络输出
ty=sim(net,tx);

%% 使用图像,画出3维图

% 真正的函数图像
interval=0.1;
[x1, x2]=meshgrid(-1.5:interval:1.5);
F = 20+x1.^2-10*cos(2*pi*x1)+x2.^2-10*cos(2*pi*x2);
subplot(1,3,1)
mesh(x1,x2,F);
zlim([0,60])
title('真正的函数图像')

% 网络得出的函数图像
v=reshape(ty,row);
subplot(1,3,2)
mesh(i,j,v);
zlim([0,60])
title('RBF神经网络结果')


% 误差图像
subplot(1,3,3)
mesh(x1,x2,F-v);
zlim([0,60])
title('误差图像')

set(gcf,'position',[300 ,250,900,400])

3.运行结果分析

         由图可知,神经网络的训练结果能较好逼近该非线性函数F,由误差图可知,神经网络的预测效果在数据边缘处的误差较大,在其他数值处的拟合效果很好。网络的输出和函数值之间的差值在隐藏层神经元的个数为100时已经接近于0,说明网络输出能非常好地逼近函数。

4案例扩展

4.1应用径向基神经网络需要注意的问题

        尽管RBF 网络的输出是隐单元输出的线性加权和,并且网络学习速率快,但并不等于RBF神经网络就可以取代其他前馈网络。这是因为RBF网络很可能需要比BP神经网络多得多的隐含层神经元来达到预期的训练目标。BP网络采用sigmoid()函数,这样的神经元有很大的输出可见区域,而径向基网络使用的径向基函数﹐输人空间区域很小,这就不可避免地导致了在输人空间较大时,需要更多的径向基神经元。

4.2SPREAD对网络的影响

        SPREAD为径向基函数的扩展系数﹐默认值为1.0。合理选择SPREAD是很重要的,其值应该足够大,使径向基神经元能够对输入向量所覆盖的区间都产生响应,但也不要求大到所有的径向基神经元都如此,只要部分径向基神经元能够对输入向量所覆盖的区间产生响应就足够了。SPREAD的值越大,其输出结果越光滑,但太大的SPREAD值会导致数值计算上的困难,若在设计网络时,出现“Rank deficient”警告,应考虑减小SPREAD 的值重新进行设计。因此,在网络设计的过程中,需要用不同的SPREAD值进行尝试,以确定一个最优值。
        为了更严格地对数据进行拟合,最好使SPREAD的值小于输人向量之间的典型距离

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/812307.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开源项目-erp企业资源管理系统(毕设)

哈喽,大家好,今天给大家带来一个开源项目-erp企业资源管理系统,项目通过ssh+oracle技术实现。 系统主要有基础数据,人事管理,采购管理,销售管理,库存管理,权限管理模块 登录 主页 基础数据 基础数据有商品类型,商品,供应商,客户,仓库管理功能

Python零基础入门(十)——模块与包

系列文章目录 个人简介:机电专业在读研究生,CSDN内容合伙人,博主个人首页 Python入门专栏:《Python入门》欢迎阅读,一起进步!🌟🌟🌟 码字不易,如果觉得文章不…

【C语言-扫雷游戏全功能详解】

目录 理解扫雷原理 梳理扫雷过程 9*9 棋盘 初始化棋盘 显示棋盘 ​编辑 布置雷 排查雷 统计x,y坐标周围有几个雷 使用递归函数来实现周围没地雷时展开多个 判断成功排除后剩下的方格数是否等于地雷数 排查函数 梳理编写代码思路 头文件game.h 库函数所需要头文件 …

STM32 cubemx配置USART DMA传输

文章目录 前言一、DMA概念二、STM32 DMA数据手册分析3.DMA模式介绍4.cubemx配置总结 前言 本篇文章来讲解DMA的概念,并使用DMA来进行串口的数据收发。 一、DMA概念 DMA(Direct Memory Access,直接内存访问)是一种计算机系统的技…

vue 设置数组

手写获取数据 <el-form-item label"缴纳方"><el-select v-model"form.invoiceCategoryName" placeholder"请选择缴纳方"><el-optionv-for"item in kplmList":key"item.value":label"item.label":v…

求解方程x^2=a的根,不使用库函数直接求解(不动点迭代法)

首先可以将方程两边同时加上x&#xff0c;&#xff0c;这时候两边同时再除以1x&#xff0c;就得到了&#xff0c;变形为。&#xff08;变性后的迭代式不唯一&#xff0c;这里随便选取一个&#xff09; 当x是准确值的时候&#xff0c;两边应该是相等的&#xff0c;如果x是近似值…

数据库连接池的使用

十、数据库连接池的使用 1、c3p0数据库连接池 硬编码&#xff1a; c3p0的帮助文档 c3p0配置文件&#xff1a; 2、dbcp数据库连接池 配置文件&#xff1a; 3、druid 将上面三个做成工具类&#xff1a;

单网卡实现 双IP 双网段(内外网)同时运行

前提是内外网是同一网线连接&#xff08;双网线双网卡的具体可以自己搜索下。理论上都设置静态IP后把外网跃点设置小&#xff0c;内网跃点设置大&#xff0c;关闭自动跃点设置同一个接口跃点数&#xff0c;在通过命令提示符添加内网网址走内网网关就可以了&#xff09;。 需要使…

Mac 定时重启 TouchBar 脚本(缓解闪烁问题)

背景 Mac 笔记本 TouchBar 是真的脆啊&#xff0c;合盖使用一段时间就废了&#xff0c;右侧一直闪烁简直亮瞎眼 &#x1f602; 经过观察&#xff0c;总结出闪烁规律如下&#xff1a; 工作状态&#xff1a;不断操作电脑时&#xff0c;触控栏处于工作状态&#xff0c;几乎不闪…

Git分布式版本控制工具和GitHub(一)--简介

一.Git概述 1.Git简介 【1】什么是Git? Git就是代码版本管理工具。 【2】为什么要使用Git &#xff08;1&#xff09;版本控制 写代码就是不断写BUG的过程&#xff08;当然我们是不会这么说的&#xff09;&#xff0c;很多时候你写了100行代码之后&#xff0c;突然醒悟&…

APP自动化测试-Python+Appium+Pytest+Allure框架实战封装(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 pytest只是单独的…

Spring——更快捷的存储 / 获取Bean对象

文章目录 前言一、存储 Bean 对象类注解为什么有五个类注解使用类注解存储对象配置扫描路径(重中之重)添加注解存储 Bean 对象 方法注解配置扫描路径(重中之重)使用方法注解存储对象 二、获取 Bean 对象Autowired属性注入Setter注入构造方法注入 Resource 总结 前言 本人是一个…

day17-二叉树的迭代遍历

二叉树的迭代遍历 二叉树的递归遍历是比较简单的 前序中序后序 前序遍历 前序遍历代码如下&#xff1a; class Solution { public:vector<int> preorderTraversal(TreeNode* root) {vector<int> res;preorder(root,res);return res;}void preorder(TreeNode* …

进度条 Vue2 +PC端 ,点击页面加载时页面顶部的那个蓝条

提示&#xff1a; <div class"global-loading"> </div> css:less <style lang"less"> .global-loading {background-color: red;height: 10px;position: fixed;z-index: 999;width: 0;animation: grow 2s infinite forwards;}keyframe…

ROS从入门到精通6-8:costmap代价地图插件编写案例(prohibition_layer)

目录 0 专栏介绍1 为什么需要代价地图插件?2 自定义代价地图插件3 仿真测试0 专栏介绍 本专栏旨在通过对ROS的系统学习,掌握ROS底层基本分布式原理,并具有机器人建模和应用ROS进行实际项目的开发和调试的工程能力。 🚀详情:《ROS从入门到精通》 1 为什么需要代价地图插…

PHP: 开发入门macOS系统下的安装和配置

安装Homebrew 安装 ~~友情提示&#xff1a;这个命令对网络有要求&#xff0c;可能需要翻墙或者用你的手机热点试试&#xff0c;或者把DNS换成&#xff08;114.114.114.114 和 8.8.8.8&#xff09; /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebr…

tensorRT模型性能测试

目录 前言1. 模型训练1.1 模型1.2 数据集1.3 xml2yolo1.4 yolo2json1.5 json2yolo1.6 训练 2. TRT模型转换2.1 YOLOv5 ONNX导出2.2 YOLOv6 ONNX导出2.3 YOLOv5 engine生成2.4 YOLOv6 engine生成 3. TRT模型测试3.1 YOLOv5 engine mAP测试3.2 YOLOv5 engine 速度测试3.3 YOLOv6 …

代码随香录算法训练营day16 | 104. 二叉树的最大深度,559. N 叉树的最大深度,111. 二叉树的最小深度,222. 完全二叉树的节点个数

目录 104. 二叉树的最大深度 559. N 叉树的最大深度 111. 二叉树的最小深度 222. 完全二叉树的节点个数 104. 二叉树的最大深度 学了回溯之后再来做一下 思路&#xff1a; 二叉树节点的深度&#xff1a;指从根节点到该节点的最长简单路径边的条数或者节点数&#xff08;取…

chatgpt 接口使用(一)

使用api实现功能 参考链接&#xff1a;https://platform.openai.com/examples 安装库&#xff1a; pip3 install openai 例如&#xff1a; import os import openaiopenai.api_key os.getenv("OPENAI_API_KEY") response openai.ChatCompletion.create(model&q…

Flutter:使用url_launcher打开外部浏览器、拨打电话、发送短信、打开第三方app、打开应用商店下载应用

前言 Flutter中的url_launcher是一个用于打开URL的插件。它允许在Flutter应用程序中打开网址、发送电子邮件、拨打电话等操作。使用url_launcher插件&#xff0c;可以轻松地在应用程序中集成各种URL操作。 官方地址 https://pub-web.flutter-io.cn/packages/url_launcher 安…