上次的微信小文中,我们通过在MATLAB中导入libsvm工具包,进行了函数拟合的实验。本次仿真实验中,我们使用RBF神经网络进行函数拟合。

1、RBF网络简介

径向基函数(Radical Basis Function, RBF)是多维空间插值的传统技术,是一种高效的前馈式神经网络,它具有其他前向网络所不具有的最佳逼近性能和全局最优特性,并且结构简单,训练速度快。其结构与多层前向网络类似,是一种三层的前向网络。第一层为输入层,由信号源结点组成;第二层为隐藏层,隐藏层节点数视所描述问题的需要而定,隐藏层中神经元的变换函数(径向基函数)是对中心点径向对称且衰减的非负非线性函数,该函数是局部响应函数;第三层为输出层,它对输入模式作出响应。

2、所用函数介绍

(1) newrb()

该函数可以用来设计一个近似(approximate)径向基网络。其调用格式为:

[net,tr]=newrb(P,T,GOAL,SPREAD,MN,DF)

其中,P为Q组输入向量组成的R*Q维矩阵;T为Q组目标分类向量组成的S*Q 维矩阵;GOAL为均方误差目标(Mean Squared Error Goal),默认为0.0;SPREAD为径向基函数的扩展速度,默认为l;MN为神经元的最大数目,默认为Q;DF为两次显示之间所添加的神经元数目,默认为25;net与tr是该函数的返回值,前者为RBF网络,后者为训练记录。

(2)newrbe()

该函数用于设计一个精确径向基网络。其调用格式为:

net=newrbe(P,T,SPREAD)

其中,P为Q组输入向量组成的R*Q维矩阵;T为Q组目标分类向量组成的S*Q维矩阵;SPREAD为径向基函数的扩展速度,默认为1。

newrb()不同,newrbe()能够基于设计向量快速、无误差地设计一个径向基网络。

(3) radbas()

该函数为径向基传递函数。其调用格式为:

A=radbas(N)

info=radbas(code)

其中,N为输入(列)向量的S*Q维矩阵;A为函数返回矩阵,与N一一对应,即N中的每个元素通过径向基函数得到A; info=radbas(code)表示根据code值的不同返回有关函数的不同信息。包括

derive——返回导函数的名称。

name——返回函数全称。

output——返回输入范围。

active——返回可用输入范围。

3、仿真结果

在仿真实验中,所使用的待拟合函数为:

F=20+x12-10*cos(2*Π*x1)+x22-10*cos(2*Π*x2);

图1 实验结果及误差

从实验结果来看,RBF神经网络拟合图像与原始的函数图像基本相同,将它们两者相减得到的结果作为误差,由误差图像可看出,RBF对非线性函数的拟合效果很好。


孙宁,重庆大学无线通信技术实验室硕士研究生,主研方向为AI在无线通信中的应用。


附:代码及注释

%%MATLAB标准三连

clc;clear;clear all

%%产生训练样本(训练输入,训练输出)

ld= 400;%ld 为样本例数

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

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

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

x2 = x(2 ,:);

F=20+x1.^2-10*cos(2*pi*x1)+x2.^2-10*cos(2*pi*x2);%构建需要拟合的函数

%%建立RBF 神经网络

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

%%产生测试样本

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];

ty = sim(net, tx);

%%画出函数三维图

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])



©著作权归作者所有:来自51CTO博客作者mob604756f3c518的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. Matlab基本语法7
  2. 浅谈SVM三特征模型的可视化与拟合度的分析
  3. 遗传算法与函数优化
  4. 3-23(类与对象终结)
  5. “手撕”BP算法——使用MATLAB搭建简单的神经网络(附代码)
  6. 练习2-10 计算分段函数[1] (10分)
  7. 启动延时缩短 50%-80%,函数计算发布镜像加速功能
  8. VS经常提示函数不安全(报错、报警告),该怎么解决?
  9. 14 个 JavaScript 代码优化技巧

随机推荐

  1. android JNI 学习笔记
  2. AVD(android virtual device )路径设置
  3. android 输入法默认设置
  4. javax.net.ssl.SSLException: hostname i
  5. Android(安卓)项目打包时出现“TaskExecu
  6. Android(安卓)Studio 发布Jar ,aar 到Mave
  7. Android中的android.provider.Settings.S
  8. 【android 自动化测试】Testing和Instrum
  9. android 一个app启动另一个App的几种方法
  10. Android调用系统, 任意比例裁剪图片