前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >径向基神经网络续1

径向基神经网络续1

作者头像
瓜大三哥
发布2018-02-26 15:53:06
5700
发布2018-02-26 15:53:06
举报
文章被收录于专栏:瓜大三哥瓜大三哥

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

1.创建函数

(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为生成的训练记录。

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

(2) newrbe函数

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

net=newrbe(P,T,spread)

其中,P为Q组输入向量;T为Q组目标分类向量;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)

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

3.转换函数

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

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

4.权函数

1.dist函数

计算欧几里得距离

2.normprod函数

用于实现规范点积权函数

5.竞争性传递函数

A=compet(N,FP)

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

1.概率分类问题

代码语言:js
复制
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网络实现曲线拟合

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

代码语言:js
复制
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('原始数据','径向基拟合','广义回归拟合');
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-12-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 瓜大三哥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.创建函数
  • (1) newrb函数
  • 2.传递函数
  • 3.转换函数
  • 4.权函数
  • 5.竞争性传递函数
  • 二、径向基审计网络的应用
    • 1.概率分类问题
      • 2.GRNN网络实现曲线拟合
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档