RBF网络能够逼近任意的非线性函数,可以处理系统内的难以解析的规律性,具有良好的泛化能力,并有很快的学习收敛速度,已成功应用于非线性函数逼近、时间序列分析、数据分类、模式识别、信息处理、图像处理、系统建模、控制和故障诊断等。
简单说明一下为什么RBF网络学习收敛得比较快。当网络的一个或多个可调参数(权值或阈值)对任何一个输出都有影响时,这样的网络称为全局逼近网络。由于对于每次输入,网络上的每一个权值都要调整,从而导致全局逼近网络的学习速度很慢。BP网络就是一个典型的例子。
如果对于输入空间的某个局部区域只有少数几个连接权值影响输出,则该网络称为局部逼近网络。常见的局部逼近网络有RBF网络、小脑模型(CMAC)网络、B样条网络等。
MATLAB中利用RBF神经网络得到的输出结果中neurons = 0,2,3,4……的意思是神经元的阶数neurons=0,表示神经元为0阶数,均方误差MSE=022
neurons=2,表示神经元为2阶数,均方误差MSE=010
neurons=3,表示神经元为3阶数,均方误差MSE=004
。。。
当神经元的阶数越高,其均方误差MSE也就越小。
没有规定说只能有一个输出,输出向量维数也是根据你的输出样本确定的。在RBF网络之前训练,需要给出输入向量X和目标向量T,训练的目的是要求得第一层和第二层之间的权值W1、阀值B1,和第二层与第三层之间的权值W2、阀值B2。整个网络的训练分为两步,第一部是无监督的学习,求W1、B1。第二步是有监督的学习求W2、B2。newrbe()函数:和newrb()功能差不多,用于创建一个精确地神经网络,能够基于设计向量快速的无误差的设计一个径向基网络。该函数在创建RBF网络的时候,自动选择隐含层数目,隐藏层的数目等于样本输入向量的数目,使得误差为0。在样本输入向量非常多的情况下,用rbe就不大合适。
newrbe是设计精确的径向基神经网络的函数,用法如:
P
=
[1
2
3];%输入
T
=
[20
41
59];%目标
net
=
newrbe(P,T);%生成神经网络
其算法是:生成的网络有2层,第一层是radbas神经元,用dist计算加权输入,用netprod计算网络输入,第二层是purelin神经元,用
dotprod计算加权输入,用netsum计算网络输入。两层都有偏差b。
newrbe先设第一层权重为p',偏差为08326,第二层权重IW{2,1}从第一层的仿真输出
A{1}得到,偏差
b{2}从解线性方程
[W{2,1}
b{2}]
[A{1};
ones]
=
T
得到。
我自己总结的:
1、神经网络算法隐含层的选取
11 构造法
首先运用三种确定隐含层层数的方法得到三个隐含层层数,找到最小值和最大值,然后从最小值开始逐个验证模型预测误差,直到达到最大值。最后选取模型误差最小的那个隐含层层数。该方法适用于双隐含层网络。
12 删除法
单隐含层网络非线性映射能力较弱,相同问题,为达到预定映射关系,隐层节点要多一些,以增加网络的可调参数,故适合运用删除法。
13黄金分割法
算法的主要思想:首先在[a,b]内寻找理想的隐含层节点数,这样就充分保证了网络的逼近能力和泛化能力。为满足高精度逼近的要求,再按照黄金分割原理拓展搜索区间,即得到区间[b,c](其中b=0619(c-a)+a),在区间[b,c]中搜索最优,则得到逼近能力更强的隐含层节点数,在实际应用根据要求,从中选取其一即可。
既然用matlab的话rbf神经网络不需要自己写代码,matlab有提供的RBF工具箱
训练命令主要有两个,一个是固定隐含层节点数的指令newrbe,一个是变隐含层节点数的指令newrb预测输出指令和其他神经网络一样,是sim
常用指令输出格式是net = newrbe(P,T,spread);net = newrb(P,T,goal,spread,MN,DF); X = sim(net,xn_test)参数具体格式参看help newrbe;help newrb以及help sim,参数物理意义参看相关理论,不再赘述了
因为一般不存在局部最小问题,所以不需要使用结构体编辑指令设置初值,如果需要中间过程的原始数据,可以在训练结构体中找到(即为net参数,存储格式为结构体),结构体内部数据的物理意义,参看help help关于rbf神经网络结构体的介绍
<神经网络之家>nnetinfo:
首先要明确网络的输入, 你在训练的时候,使用1-50作为输入,sample里的数据做输出在用它来做预测时,却用sample里的数据做输入,这样就乱套了
若果只有一列数据,而这列数据又不是时间序列,那就没办法用前面的数据去预测后面的数据因为它们之间没有关联
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)