径向基神经网络续1

原创
2017/12/28 21:00
阅读数 56

一、径向基神经网络的函数

1.创建函数

(1) newrb函数

该函数用于设计一个径向基神经网络:

[net,tr]=newrb(P,T,goal,spread,MN,DF)

其中,PQ组输入向量;TQ组目标分类向量;goal为均方误差,默认为0spread为径向基函数的分布,默认值为1MN为神经元的最大数目,默认值为QDF为两次显示之间所添加的神经元数目,默认为25net为生成的径向基网络;tr为生成的训练记录。

在上述代码中,可自行修改spread参数的值,观察结果有何不同,加入用代码net=newrb(p,t,0,0.6);替换为net=newrb(p,t);可以讲spread参数从默认值1改为0.6,使拟合的曲线更加精细,拟合效果如上图所示。

(2) newrbe函数

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

net=newrbe(P,T,spread)

其中,PQ组输入向量;TQ组目标分类向量;spread为径向基函数的分布,默认值为1.

(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的值。

2.传递函数

matlab神经网络工具箱中,提供了radbas函数用于实现径向基函数网络的传递。函数的调用格式为:

A = radbas(N,FP)

其中,输入参数NSxQ维的网络输入(列)向量矩阵;FP为性能参数(可忽略),返回网络输入向量N的输出矩阵A

3.转换函数

ind2vec(ind):将数据索引转换为向量组,其中ind2vec函数输入为包含n个下标的行向量ind,调用后可以得到mn列的向量组矩阵,结果是矩阵中的每个向量I,除了ind中的第I个元素指定位置为1外,其余元素为0,结果矩阵的行数等于ind中最大的下标值。

vec2ind(vec):该函数的功能是将单值向量变换成下标值。

4.权函数

1.dist函数

计算欧几里得距离

2.normprod函数

用于实现规范点积权函数

5.竞争性传递函数

A=compet(N,FP)

二、径向基审计网络的应用

1.概率分类问题

clear all;

p=[1,2;2,2;1,1]';

t=[1,2,3];

% 绘制输入向量及其相应的类别

plot(p(1,:),p(2,:),'r.','markersize',30);

for i=1:3

    text(p(1,i)+0.1,p(2,i),sprintf('class %g',t(i)));

end

axis([0 3 0 3]);

% 将期望类别指针t转换为向量tc

tc=ind2vec(t);

spread=1;

net=newpnn(p,tc,spread);

a=sim(net,p);

ac=vec2ind(a);

plot(p(1,:),p(2,:),'r.','markersize',30);

axis([0 3 0 3]);

for i=1:3

    text(p(1,i)+0.1,p(2,i),sprintf('class %g',ac(i)));

end

% 在对新输入向量p进行测试

p=[2;1.5];

a=sim(net,p);

ac=vec2ind(a);

hold on

plot(p(1),p(2),'*','markersize',10,'color',[1 0 0]);

text(p(1)+0.1,p(2),sprintf('class %g',ac));

% hold off

xlabel('p(1,:)p(1)')

ylabel('p(2,:)p(2)')

% 通过立体图显示三个类别所在面的情况及新的输入向量对应的类别

p1=0:0.05:3;

p2=p1;

[p1,p2]=meshgrid(p1,p2);

pp=[p1(:),p2(:)]';

aa=sim(net,pp);

aa=full(aa);

m=mesh(p1,p2,reshape(aa(1,:),length(p1),length(p2)));

set(m,'facecolor',[0 0.5 1],'linestyle','none');

hold on

m=mesh(p1,p2,reshape(aa(2,:),length(p1),length(p2)));

set(m,'facecolor',[0 0.1 0.5],'linestyle','none');

m=mesh(p1,p2,reshape(aa(3,:),length(p1),length(p2)));

set(m,'facecolor',[0.5 0 1],'linestyle','none');

plot3(p(1,:),p(2,:),[1 1 1]+0.1,'.','markersize',30);

plot3(p(1),p(2),1.1,'*','markersize',10,'color',[1 0 0]);

2.GRNN网络实现曲线拟合

广义回归神经网络以径向基网络为基础发展而来,相比径向基网络,更适合解决曲线你和问题,而且速度更快。

clear all;

x=-9:8;

y=[129,-32,-118,-138,-125,-97,-55,-23,-4,2,1,-31,-72,-121,-142,-174,-155,-77];

plot(x,y,'ro');

p=x;

t=y;

tic;

net=newrb(p,t,0,2);

toc

xx=-9:0.2:8;

yy=sim(net,xx);

hold on;

plot(xx,yy);

tic;

net2=newgrnn(p,t,0.5);

toc

yy2=sim(net2,xx);

plot(xx,yy2,'.-k');

legend('原始数据','径向基拟合','广义回归拟合');


 

 

 

 

 


本文分享自微信公众号 - 瓜大三哥(xiguazai_tortoise)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部