本篇博客为书籍:《MATLAB R2015b 神经网络技术》的读书摘要,侵权请联系作者删除。
转载请注明地址:http://blog.sina.com.cn/s/blog_a36a563e0102ywli.html
第七章 径向基神经网络(RBF)
7.8 径向基神经网络的函数(MATLAB代码实现)
本节内容:
  • 7.8.1 径向基神经网络的创建函数
  • 7.8.2 径向基神经网络的传递函数
  • 7.8.3 径向基神经网络的转换函数
  • 7.8.4 径向基神经网络的权函数
  • 7.8.5 竞争性传输

7.8.1 径向基神经网络的创建函数

    在MATLAB中,提供了newrb、newbe、newpnn、及newgrnn函数用于创建径向基神经网络,下面分别给予介绍。
    1. newrb函数
    该函数用于设计一个径向基网络。函数的调用格式为:
        [net,tr] = newrb(P,T,goal,spread,MN,DF)
    其中,P为Q组输入向量;T为Q组目标分类向量;goal为均方误差,默认为0;spread为径向基函数的粉扑,默认值为1;MN为神经元的最大数目,默认值为Q;DF为两次显示之间所添加的神经元数目,默认为25;net为生成的径向基网络;tr为生成的训练记录。
    2. newrbe函数
    该函数用于设计一个准确的径向基网络。函数的调用格式为:
      net = newrbe(P,T,spread)
    其中,P为Q组输入向量;T为Q组目标分类向量;spread为径向基函数的分布,默认值为1。
    一般来讲,newrbe与newrb一样,神经元数目越大,对函数的拟合就越平滑。但是,过多的神经元可能会导致计算困难。
    3. newpnn函数
    该函数可用于创建概率神经网络,概率神经网络是一种适用于分类问题的径向基函数。函数的调用格式为:
      net = newpnn(P,T,spread)
    其中,输入参数P为输入向量;T为输出向量;spread为径向函数的分布密度,参数spread的大小对网络的逼近精度有很大的影响,需要不断地调整spread的值。
    spread越小,函数的逼近越精确,但是逼近的过程就越粗糙;spread越大,逼近过程就比较平滑,单是逼近的误差会比较大。
     newpnn创建的是一个两层的神经网络:
        第一层的神经元是径向基神经元,用dist函数计算加权输入,用netprod计算网络输入;
        第二层的神经元是竞争神经元,用dotprod函数计算加权输入,用netsum函数计算网络输入。
    其中只有第一层包含阈值。网络将第一层的权值设置为P,第一层的阈值设置为0.8326/spread,且加权输入为±spread时,径向基函数取值恰好为0.5,第二层的权值被设置为T。
    4. newgrnn函数
    该函数可用于设计一个广义的回归神经网络。广义回归神经网络是径向基函数神经网络的一种,通常用于函数逼近。函数的调用格式为:
      net = newgrnn(P,T,spread)
    其中,输入参数P为输入向量;T为输出向量;spread为径向基函数的分布密度,参数spread的大小对网络的逼近精度有很大的影响,需要不断地调整spread的值。spread越小,函数的逼近越精确,但是逼近的过程就越粗糙;spread越大,逼近过程就比较平滑,单是逼近的误差会比较大。
【例7-1:使用newrb函数】 生成正弦函数,加入均匀分布的噪声,再用newrb建立径向基函数进行拟合。
【MATLAB代码:】
P = 1:0.5:10;
randn('state',pi); % same as RNG
T = sin(2 * P) + randn(1,length(P)); % add noise
plot(P,T,'ro');
net = newrb(P,T,0,0.6); % design net
test = 1:.2:10;
out = sim(net,test);    
hold on; plot(test,out,'b-');
legend('input data','fit data');
【运行结果:】
   
  在以上代码中,可自行修改spread参数的值,观察结果有何不同,假如用代码net=newrb(P,T,0,0.6)替换为new=newrb(P,T),可以将spread参数从默认值1改为0.6,使拟合曲线更加精密。
【例7-2:使用newrbe函数】 利用newrbe函数创建一个准确的径向基网络
【MATLAB代码:】
P=[1 2 3 4 5];
T=[0.5 2.3 3.2 4.6 6.7];
sprs=1;
net=newrbe(P,T,sprs);   %创建准确径向基网络
A=sim(net,P)     %仿真
postreg(A,T);    %绘制目标向量的回归曲线
p=3.5;
a=sim(net,P)    %测试样本输出
【例7-3:使用newpnn函数】 利用newpnn函数创建概率神经网络
【MATLAB代码:】
P = [1 2 3 4 5 6 7];
Tc = [1 2 3 2 2 3 1];
T = ind2vec(Tc)          %将数据索引转换为向量组
net = newpnn(P,T);      %创建概率神经网络
Y = sim(net,P)           %仿真
Yc = vec2ind(Y)         %将数组矢量转换成数据索引
【例7-4:使用newgrnn函数】使用newgrnn函数创建广义回归网络,对非线性曲线:y=2x^6+3x^5+3x^3-2x^2进行逼近。
【MATLAB代码:】
x=-2:0.01:1;
y=2*x.^6+3*x.^5+3*x.^3-2*x.^2;
P=x(1:15:end);
T=y(1:15:end);
%实现不同的spread下广义回归神经网络函数逼近效果
spread=[0.05 0.2 0.4 0.6 0.8 1];   %3组不同的spread值
line_style={'k.-.','r*:','mo-.','bo--','k^-','bx-'};
for i=1:length(spread)
    net=newgrnn(P,T,spread(i));     %创建广义回归神经网络
    A=sim(net,P);
    plot(P,A,line_style{i});        %创建逼近曲线
    hold on;
end
plot(P,T,'o');
legend('spread=0.05','spread=0.2','spread=0.4','spread=0.6','spread=0.8','spread=1','训练数据');
【运行结果:】

    从上图可以看出,不同spread值下广义回归神经网络曲线逼近效果差异较大,当spread=0.5时,曲线逼近效果最好,与原曲线基本重合,而随着spread数值的增大,逼近曲线误差增大。
7.8.2 径向基神经网络的传递函数
    在MATLAB神经网络工具箱中,提供了radbas(高斯函数)函数用于实现径向基函数网络的传递。函数的调用格式为:
      A = radbas(N,FP)
    其中,输入参数N为SxQ维的网络输入(列)向量矩阵;FP为性能参数(可忽略),返回网络输入向量N的输入矩阵A。
    radbas函数采用的算法为:
      a = radbas(n) = exp{-n^2 }
7.8.3 径向基神经网络的转换函数
    在MATLAB神经网络工具箱中提供了ind2vec和vec2ind两种函数用于进行数据间的转换,下面予以介绍。
    1.ind2vec函数
    该函数用于将数据索引转换为向量组。调用格式为:
      ind2vec(ind)
    其中,ind2vec函数输入为包含n个下标的行向量ind,调用后可以得到m行n列的向量组矩阵,结果是矩阵中的每个向量I,除了ind中第I个元素指定位置为1外,其余元素为0,结果矩阵的行数等于ind中最大的下标值。
    2.ver2ind函数
    改函数的功能是将单值向量变换成下标向量。调用格式为:
      ver2ind(vec)
    其中,ver2ind和ind2vec函数互为逆变换,ver2ind函数输入为一个m行n列向量矩阵vec,调用后可以得到n个下标值大于等于0的行向量,x中的每个向量I除包含一个1外,其余均为0,得到的行向量包含这些非0元素的下标。
(PS:类似于数值与one-hot之间的转换,请看例子)
【例子:转换函数的使用】
>>ind = [1 2 3 4]; vec = ind2vec(ind)
【输出:】
vec =
   (1,1)        1
   (2,2)        1
   (3,3)        1
   (4,4)        1
>> vec2 = [1 0 0 0;0 1 0 0;0 0 1 0 ]'  , [ind,n] = vec2ind(vec2)
【输出:】
vec2 =
     1     0     0
     0     1     0
     0     0     1
     0     0     0
ind =
     1     2     3
n =
    4
7.8.4 径向基神经网络的权函数
    在MATLAB神经网络工具箱中提供了dist及normprod两种类型的权函数。
    1.dist函数
    dist函数用于计算欧几里得距离,调用格式为:
      Z = dist(W,P,FP)
    其中,输入参数W为SxR权值矩阵,P为RxQ输入矩阵;FP为性能参数;输出参数Z为SxQ的输出距离矩阵。
    向量的欧几里得距离就是两个向量之间的2-范数。
      dim = dist( 'size' , S , R , FP ):其中含有W的权值(行)向量和P的输入(列)向量的向量距离;S为层的维数;R为输入的维数;输出参数dim为权值的大小。
      dp = dist( ' dw ', W , P , Z , FP):输出参数dp为Z对P的导数;输入参数dw为Z对W的导数。
      D = dist(pos):输入参数pos为神经元位置的NxS维矩阵;输出参数D为SxS维的距离矩阵。
    2.normprod函数
    normp函数用于实现规范点积权函数,调用格式为:
      Z = normprod(W,P,FP)
    其中,参数W为SxR权值矩阵;P为RxQ输入矩阵;FP为函数的参数结构(可忽略);返回参数Z为规范点积权。
      dim = norm('size' , S , R , FP):参数S为层的维数;R为输入的维数,dim为权值的大小。
      dw = normprod('dz_dw' , W , P , Z , FP):返回参数dw为Z对W的导数。
 
7.8.5 竞争性传输函数
    在MATLAB中,提供了compet函数实现径向基网络的竞争性传输功能,其调用格式为:
       A = compet(N,FP)
    其中,compet是神经网络的传输函数u,传输函数用于从网络输入中求得网络输出。N为SxQ,包含Q个长度为S的列向量,对每个列向量分别求最大值对应位置,A中的元素为1,其余元素为0,A的每一列中有且仅有一个元素等于1。
    可用如下代码给网络第i层设置传输函数:
      net.layers{i}.transferFcn = 'compet';

径向基神经网络(RBF)《MATLAB R2015b 神经网络技术》相关推荐

  1. 【机器学习】径向基(RBF)神经网络的tensorflow实现

    [机器学习]径向基(RBF)神经网络的tensorflow实现 一.tensorflow简介 1.1.基础概念 1.1.1计算图 1.1.2 Session会话 1.2.应用流程 二.RBF神经网络的 ...

  2. python中rbf神经网络包_Python实现的径向基(RBF)神经网络示例

    本文实例讲述了Python实现的径向基(RBF)神经网络.分享给大家供大家参考,具体如下: from numpy import array, append, vstack, transpose, re ...

  3. matlab程序神经网络的,matlab 通用神经网络代码(转)

    感应器神经网络.线性网络.BP神经网络.径向基函数网络 %通用感应器神经网络. P=[-0.5 -0.5 0.3 -0.1 -40;-0.5 0.5 -0.5 1 50];%输入向量 T=[1 1 0 ...

  4. 卷积神经网络代码 Matlab,卷积神经网络matlab程序

    cnn卷积神经网络用什么语言来写pascial . 200+这个是hintonmatlab代码的C++改写版.convnetjs-Star,SAE,首选的肯定是LIBSVM这个库;RBM#47.Dee ...

  5. 径向基(RBF)神经网络

    RBF网络能够逼近任意非线性的函数.可以处理系统内难以解析的规律性,具有很好的泛化能力,并且具有较快的学 习速度.当网络的一个或多个可调参数(权值或阈值)对任何一个输出都有影响时,这样的网络称为全局逼 ...

  6. 神经网络的matlab代码,神经网络 matlab代码

    [实例简介] [实例截图] [核心代码] %% I. 清空环境变量 clear all clc %% II. 训练集/测试集产生 %% % % 1. 导入数据 % importdata('新建文本文档 ...

  7. matlab径向基网络,MATLAB——径向基网络拟合曲线和分类

    1.广义RBF P=:.:; rand('state',pi); %指定状态,产生相同的随机数 T=sin(*P)+rand(,length(P)); % 给正弦函数加噪声 plot(P,T,'o') ...

  8. 机器学习--支持向量机(六)径向基核函数(RBF)详解

    前面讲解了什么是核函数,以及有效核函数的要求,到这里基本上就结束了,很多博客也是如此,但是呢这些只是理解支持向量机的原理,如何使用它讲解的却很少,尤其是如何选择核函数更没有人讲,不讲也是有原因的,因为 ...

  9. 神经网络模型matlab例子,神经网络算法matlab

    1.如何利用matlab神经网络工具箱做神经网络分析 神经网络技术在模式识别与分类.识别滤波.自动控制.预测等方面已展示了其非凡的优越性.神经网络的结构由一个输入层.若干个中间隐含层和一个输出层组成. ...

最新文章

  1. tensorflow随笔-底层梯度
  2. mysql协议重传_TCP协议详解
  3. 小猿圈之python的输入和输出
  4. python pandas 日期_python+pandas+时间、日期以及时间序列处理方法
  5. CSS3---新增内容
  6. Centos7安装完成找不到 ifconfig 网路设置命令
  7. CA的建立与证书的颁发
  8. 04735数据库系统原理(知识点整合)
  9. redis下载配置并简单测试(免安装版)
  10. Google Code的简单使用
  11. opencontrail-vrouter命令
  12. 应用于arcgis的代码,长期更新…
  13. 计算机网络(学习过程中--持续更新)
  14. 可数集合与不可数集合
  15. JVM类加载过程,JDK和JER区别
  16. Eclipse中如何把自己写的方法封装成jar包供其他项目使用
  17. 如何将nes游戏刻录到vcd光盘中玩?
  18. MEM/MBA数学强化(08)数据分析
  19. 如何用SpreadJS添加背景图片和水印?
  20. 『每周译Go』写了 50 万行 Go 代码后,我明白这些道理

热门文章

  1. React Native包体积优化之图片优化
  2. hdu4562 守护雅典娜
  3. 巧妙解决appleid问题答案忘了的问题
  4. grep命令详解(常用参数)
  5. pythondef教程_Python教程——def()函数
  6. 关于Java.lang.UnsatisfiedLinkError的错误解决办法
  7. 新浪微博第三方登陆开发流程及常见问题
  8. 前端工具——编辑器之webstrom
  9. Stable Diffusion 如何解决双头问题
  10. 一个快速启动软件 TStart