newrb----matlab神经网络工具箱使用教学
<原创文章,转载请说明来自神经网络之家www.nnetinfo.com>
首先献上一个自己编写能跑得过的demo(2012实测能跑过):
x1 = 1:0.2:10; x2 = -5:0.2:4; X = [x1;x2]; %注意中间是分号 Y = sin (X(1,:))+X(2,:); net = newrb(X, Y, 0, 2) %以X,Y建立径向基网络,目标误差为0.01,径向基的spread=2 simY = sim(net, X); %用建好的网络拟合原始数据 figure(1); t = 1:size(Y,2); plot(t,Y,'*',t,simY,'r') |
有些同学会非常奇怪,为什么径向基神经网络不需要调用train来训练网络(像BP神经网络就需要train)。
这是因为matlab工具箱在你调用newrb建立径向基神经网络的时候,就已经使用正交最小二乘(OLS)优选
算法对神经网络的权重阈值求得最优解了,所以之后不再需要对网络进行训练。
为了方便大家更了解如何在matlab调用径向基神经网络newrb,下面翻译matlab给出的doc newrb 文档(为
方便大家理解,本人作了些少改动),帮助大家更进一步使用newrb:
语法:
net=newrb(P,T,goal.spread,MN,DF)
描述:
径向基神经网络可以用于拟合函数。newrb会不断向径向基网络的隐层添加神经元,直到网络达到指定的均
方误差目标。
net=newrb(P,T,goal.spread,MN,DF) 至少需要2个入参。
入参 | 说明 |
P | R行Q列的输入矩阵,R个输入变量,Q个样本。 |
T | S行Q列的目标输出矩阵,S个输出变量,Q个样本。 |
goal | 均方误差目标(默认=0.0) |
spread | 径向基函数的扩展系数(默认=1.0) |
MN | 隐层神经元的最大个数(默认是Q) |
DF | 每添加DF个神经元,在command窗口打印一次当前结果(文档说默认是25,本人试了,默认是50) |
返回一个新的径向基神经网络。
扩展系数spread 越大,拟合的函数越平滑。 太大的扩展系数,对于拟合迭宕起伏的函数,会需要非常多的
神经元;太小的扩展系数,在拟合平滑的函数时会需要很多神经元,而且泛化能力不好。(Too large a spread
means a lot of neurons are required to fit a fast-changing function. Too small a spread means many
neurons are required to fit a smooth function, and the network might notgeneralize well.)。对于给
定的问题,通过设置不同的扩展系数调用newrb,来找到最好的扩展系数。
对于给定的输入 P和目标T,你可以设计一个径向基神经网络如下:
P = [1 2 3];
T = [2.0 4.1 5.9];
net = newrb(P,T);
下面网络拟合一个新的输入
P = 1.5;
Y = sim(net,P)
算法:
newrb创建一个两层的神经网络。第一层是径向基神经元,并用dist来计算它的加权输入和用
netprod来计算它的网络输入。第2层是线性神经元,用dotprod计算它的加权输入和netsum计
算网络输入,两层都有阈值。
刚初始化的径向基层没有神经元,不断的重复下面的步骤直到神经网络的均方误差达到目标。
1)网络被拟合。
2)找到最大误差的输入样本
3)以该样本的值作为权值,添加新的径向神经元
4)重新计算线性层的权值,使误差最小化。