竞争型神经网络续1
1.竞争神经网络函数
1.1创建函数
1.1.1 newc函数
newc函数用于创建一个竞争层,这是一个旧版本的函数,现在用competlayer函数代替。函数调用格式:
net = newc(range,class,klr,clr);
其中,class是数据类别个数,也是竞争层神经元的个数;klr和clr分贝是网络的权值学习速率和阈值学习速率。竞争型网络在训练时不需要目标输出,网络通过对数据分布特性的学习,自动地将数据划分为制定类别数。
返回参数net是一个新的竞争层。该网络采用negdist作为权值函数,netsum作为网络输入函数,以及compet作为传输函数。除了权值以外,网络还包含一个阈值,权值和阈值使用midpoint和initcon函数进行初始化。
p=[0.1 0.8 0.1 0.9;0.2 0.9 0.1 0.8];
% 创建自组织竞争神经网络
net=newc(p,2);
% 训练神经网络
net = train(net,p);
% 网络仿真
y = sim(net,p)
yc = vec2ind(y)
1.1.2 competlayer函数
competlayer函数创建一个竞争网络层,它根据输入样本之间的相似性对其及逆行分类,分类的类别数是给定的。该函数总是倾向于给每一个类别分配相同数量的样本,尽量均衡地进行分配。函数的调用格式为:
competlayer(numClass,kohonenLR,conscienceLR) 其中,输入参数numClass为分类的类别数;kohonenLR为Kohonen学习率;conscienceLR为“良心”学习率,即阈值学习规则的学习率。
inputs=iris_dataset;
net=competlayer(6);
net=train(net,inputs);
view(net)
outputs=net(inputs)
classes=vec2ind(outputs)
1.1.3 newsom函数
newsom函数可以创建一个自组织特征映射网络,在新版本中使用selforgmap代替。函数调用格式如下:
net = newsom(PR,[d1,d2,...],tfcn,dfcn,olr,osteps,tlr,tns)
输入参数PR为R个输入元素的最大值和最小值的设定值,Rx2维矩阵;di为第i层的维数,默认[5,8];tfcn为拓扑函数,默认为hextop;dfcn为距离函数,默认为linkdist;olr为分类阶段学习速率,默认为0.9;osteps为分类阶段的步长,默认为1000;tlr为调谐阶段的学习速率,默认为0.02;tns为调谐阶段的邻域距离,默认为1。输出参数net为生成的自组织特征映射神经网络。
1.1.4 selforgmap函数
利用数据本身的相似性和拓扑结构对数据进行聚类。
x=simplecluster_dataset;
plot(x(1,:),x(2,:),'mo');
net = selforgmap([8 8]);
net = train(net,x);
y = net(x);
classes = vec2ind(y);
figure;
hist(classes,64)
1.1.5 newlvq函数
newlvq函数用于创建学习向量量化LVQ网络,在新版中使用lvqnet代替。函数的调用格式如下:
net = newlvq(PR,S1,PC,LR,LF)
其中,输入参数PR为一个Rx2维输入矩阵,它决定了输入向量的最小值和最大值,R为输入向量的个数;S1表示隐含层神经元的数目;PC表示在第二层的权值中列所属类别的百分比;L表示学习速率,默认值为0.01;LF表示学习函数,默认值为learnlvq;输出参数为生陈大哥学习向量量化网络。
1.1.6 lvqnet函数
lvqnet(hiddenSize,lvqLR,lvqLF)
其中,参数hiddenSize是竞争层神经元个数,lvqLR为学习率,lvqLF为学习函数
[x,t]=iris_dataset;
net = lvqnet(10);
net.trainParam.epochs = 50;
net = train(net,x,t);
view(net)
y=net(x)
perf = perform(net,y,t)
classes = vec2ind(y);
1.2 学习函数
1.2.1 learnk函数
1.2.2 learnis函数
1.2.3 learnos函数
1.2.4 learnh函数
1.2.5 learnhd函数
1.2.6 learnsom函数
1.2.7 learnlv1函数
1.2.8 learnlv2函数
1.3 传递函数
A = softmax(N,FP):N为SxQ,包含Q个长度为S的列向量,对每个列向量分别求最大值,返回同类型矩阵A,在每一列的最大值对应位置,A中的元素为1,其余元素为0,A中的每一列中有且只有一个元素等于1。
1.4 初始化函数
W=midpoint(S,PR):参数S为神经元的数目;PR为输入向量取值范围的矩阵,W为函数返回权值矩阵
1.5 结构函数
1.5.1 gridtop函数
该函数用于创建自组织映射网络中输出层的网络拓扑结构。函数调用格式为:
pos = gridtop(dim1,dim2,...,dimN)
1.5.2 hextop函数
该函数用于创建一个二维的六边形神经网络
1.5.3 randtop函数
该函数用于创建一个二维的随机层神经网络
1.5.4 tritop函数
该函数用于创建一个二维的三角拓扑结构
1.6 距离函数
1.6.1 boxdist函数
boxdist函数用于求得的距离是向量个分量绝对差的最大值
1.6.2 linkdist函数
linkdist函数为链接距离函数,在给定神经元位置后,该函数用于计算神经元之间的距离。
1.6.3 Manhattan函数
该函数用于计算曼哈顿距离,曼哈顿距离是指出租车几何距离,相当于向量之差的1-范数。计算公式为:
Manhatten函数的调用格式为:
z=mandist(W,P)
其中,参数W为RxQ矩阵,每列是一个输入的样本向量,共Q个严格吧你。P为SxQ权值矩阵。函数返回每个样本向量与相应输出神经元权值向量的曼哈顿距离。
1.7 距离绘图函数
1.7.1 plotsom函数
该函数用于自组织特征映射网络的权值图
1.7.2 plotvec函数
该函数用于显示LVQ网络,函数的调用格式为:
plotvec(X,C,M)
其中,输入参数X为一个列向量矩阵;C为标记颜色坐标的行向量;M为指定绘图时向量的标记符号,默认值为“+”。
1.8 归一化函数
[Y,PS]=mapminmax(X,YMIN,YMAX)
其中,函数将X中的值归一化到[-1,1]区间,X可以是矩阵或元胞数组。归一化的结果保存在Y中,PS保存了归一化信息,可以用来做数据的反归一化。
2 自组织竞争神经网络的应用
2.1 对应传播网络的应用
创建一个CPN网络,完成在已知一个人本星期应该完成的工作量和此人当时的思乡情绪,对此人星期日下午的活动安排提出建议。
工作量 |
思想情绪 |
活动安排 |
目标输出 |
---|---|---|---|
没有0 |
低0 |
看画报 |
10000 |
有一些0.5 |
低0 |
看画报 |
10000 |
没有0 |
一般0.5 |
购物 |
01000 |
很多1 |
高1 |
散步 |
00100 |
有一些0.5 |
高1 |
吃饭 |
00010 |
很多1 |
一般0.5 |
工作 |
00001 |
clear all;
clc;
% 初始化正向权值w和反向权值v
w=rand(18,2)/2+0.5;
v=rand(5,18)/2+0.5;
% 输入向量p和目标向量t
p=[0 0;0.5 0;0 0.5;1 1;0.5 1;1 0.5];
t=[1 0 0 0 0;1 0 0 0 0;0 1 0 0 0;0 0 1 0 0;0 0 0 1 0;0 0 0 0 1];
t_out=t;
% 设定学习步数为1000
epoch=1000;
% 归一化输入向量p
for i=1:6
if p(i,:)==[0 0];
p(i,:)=p(i,:);
else
p(i,:)=p(i,:)/norm(p(i,:));
end
end
% 开始训练
while epoch>0
for j=1:6
% 归一化正向权值w
for i = 1:18
w(i,:)=w(i,:)/norm(w(i,:));
s(i)=p(j,:)*w(i,:)';
end
% 求输出为最大的神经元
temp=max(s);
for i= 1:18
if temp==s(i)
count=i;
end
% 将所有竞争层神经元的输出置为0
for i=1:18
s(i)=0;
end
% 将获胜神经元的输出置为1
s(count)=1;
% 权值调整
w(count,:)=w(count,:)+0.1*[p(j,:)-w(count,:)];
w(count,:)=w(count,:)/norm(w(count,:));
v(:,count)=v(:,count)+0.1*(t(j,:)'-t_out(j,:)');
% 计算网络输出
t_out(j,:)=v(:,count)';
end
epoch=epoch-1;
end
% 训练结束
end
t_out
% 网络回想,其输入模式为pc
pc=[0.5 1;1 1];
% 归一化
for i=1:2
if pc(i,:)==[0 0]
pc(i,:)=pc(i,:);
else
pc(i,:)=pc(i,:)/norm(pc(i,:));
end
end
%
% 网络输出
outc=[0 0 0 0 0;0 0 0 0 0];
% outc
for j=1:2
for i=1:18
sc(i)=pc(j,:)*w(j,:)';
end
tempc = max(sc);
for i=1:18
if tempc==sc(i)
countp=i;
end
sc(i)=0;
end
sc(countp)=1;
outc(j,:)=v(:,countp)';
end
outc
for j=1:2
for i=1:18
outc(j,:)=outc(j,:)/norm(outc(j,:));
end
end
outc
2.2 学习向量量化网络的应用
p=[-3 -2 -2 0 0 0 0 2 2 3;0 1 -1 2 1 -1 -2 1 -1 0];
c=[1 1 1 2 2 2 2 1 1 1];
t=ind2vec(c);
i=1;
cla;
for i=1:10
if c(i)==1
plot(p(1,i),p(2,i),'b+')
hold on
else
plot(p(1,i),p(2,i),'r*')
hold on
end
end
net = newlvq(minmax(p),4,[0.6 0.4],0.1);
hold on
w1=net.iw{1};
plot(w1(1,1),w1(1,2),'p');
% 设置网络训练参数
net.trainParam.epochs=150;
net.trainParam.show=Inf;
net=train(net,p,t);
w1=net.iw{1};
w2=vec2ind(net.LW{2});
i =1;
cla;
for i=1:10
if c(i)==1
plot(p(1,i),p(2,i),'p')
hold on
else
plot(p(1,i),p(2,i),'o')
hold on
end
end
j=1;
for j=1:4
if w2(j)==1
plot(w1(j,1),w1(j,2),'p','markersize',15);
hold on;
else
plot(w1(j,1),w1(j,2),'o','markersize',15);
hold on;
end
end
训练后的网络已经基本可以将数据分为两类
2.3 自组织映射网络的应用
使用SOM神经网络诊断柴油机故障步骤如下:
(1)选取标准故障样本;
(2)对每一种标准故障样本进行学习,学习结束后,对具有最大输出的神经元标以该故障的记号;
(3)将待检样本输入到SOM神经网络中;
(4)如果输出神经元所在输出层的位置与某标准故障样本位置相同,说明待检样本发生了相应的故障;如果输出神经元在输出层的位置介于很多标准故障之间,说明这几种标准故障都有可能发生,且各故障的称嘀咕由该位置与相应标准样本位置的欧氏距离确定。
故障原因 |
P1 |
P2 |
p3 |
p4 |
p5 |
p6 |
p7 |
p8 |
---|---|---|---|---|---|---|---|---|
T1 |
0.9325 |
1 |
1 |
-0.4635 |
0.3895 |
1 |
1 |
1 |
T2 |
-0.4571 |
-0.2854 |
-0.9024 |
-0.9121 |
-0.0841 |
1 |
-0.2871 |
0.5647 |
T3 |
0.5134 |
0.9413 |
0.9711 |
-0.4187 |
0.2855 |
0.8546 |
0.9478 |
0.9512 |
T4 |
0.1545 |
0.1564 |
-0.5 |
-0.6571 |
-0.3333 |
-0.6667 |
-0.3333 |
-0.5 |
T5 |
0.1765 |
0.7648 |
0.4259 |
-0.6472 |
-0.0563 |
0.1726 |
0.5151 |
0.4212 |
T6 |
-0.6744 |
-0.4541 |
-0.8454 |
1 |
-0.8614 |
-0.6714 |
-0.6279 |
-0.6785 |
T7 |
0.4647 |
0.871 |
0.0712 |
-0.7845 |
-0.2871 |
0.8915 |
0.6553 |
0.6152 |
T8 |
0.6818 |
1 |
-0.625 |
-0.8426 |
-0.6215 |
-0.1574 |
1 |
0.7782 |
clear all;
p=[0.9325 1 1 -0.4635 0.3895 1 1 1;...
-0.4571 -0.2854 -0.9024 -0.9121 -0.0841 1 -0.2871 0.5647;...
0.5134 0.9413 0.9711 -0.4187 0.2855 0.8546 0.9478 0.9512;...
0.1545 0.1564 -0.5 -0.6571 -0.3333 -0.6667 -0.3333 -0.5;...
0.1765 0.7648 0.4259 -0.6472 -0.0563 0.1726 0.5151 0.4212;...
-0.6744 -0.4541 -0.8454 1 -0.8614 -0.6714 -0.6279 -0.6785;...
0.4647 0.871 0.0712 -0.7845 -0.2871 0.8915 0.6553 0.6152;...
0.6818 1 -0.625 -0.8426 -0.6215 -0.1574 1 0.7782];
net=newsom(minmax(p),[6 6]);
plotsom(net.layers{1}.positions);
% 7次训练
a=[10 30 50 100 200 500 1000];
% 随机初始化一个7*8向量
yc=rands(7,8);
% 训练次数为10次
net.trainParam.epochs=a(1);
% 训练网络和查看分类
net=train(net,p);
y=sim(net,p);
yc(1,:)=vec2ind(y);
plotsom(net.iw{1,1},net.layers{1}.distances)
% 训练次数为30次
net.trainParam.epochs=a(2);
% 训练网络和查看分类
net=train(net,p);
y=sim(net,p);
yc(2,:)=vec2ind(y);
plotsom(net.iw{1,1},net.layers{1}.distances)
% 训练次数为50次
net.trainParam.epochs=a(3);
% 训练网络和查看分类
net=train(net,p);
y=sim(net,p);
yc(3,:)=vec2ind(y);
plotsom(net.iw{1,1},net.layers{1}.distances)
% 训练次数为100次
net.trainParam.epochs=a(4);
% 训练网络和查看分类
net=train(net,p);
y=sim(net,p);
yc(4,:)=vec2ind(y);
plotsom(net.iw{1,1},net.layers{1}.distances)
% 训练次数为200次
net.trainParam.epochs=a(5);
% 训练网络和查看分类
net=train(net,p);
y=sim(net,p);
yc(5,:)=vec2ind(y);
plotsom(net.iw{1,1},net.layers{1}.distances)
% 训练次数为500次
net.trainParam.epochs=a(6);
% 训练网络和查看分类
net=train(net,p);
y=sim(net,p);
yc(6,:)=vec2ind(y);
plotsom(net.iw{1,1},net.layers{1}.distances)
% 训练次数为1000次
net.trainParam.epochs=a(7);
% 训练网络和查看分类
net=train(net,p);
y=sim(net,p);
yc(7,:)=vec2ind(y);
plotsom(net.iw{1,1},net.layers{1}.distances)
% 测试样本输入
t=[0.9512 1.0000 0.9458 -0.4218 0.9511 0.9645 0.8941]';
% 用sim来做网络仿真
r=sim(net,t);
% 变换函数,将单值向量转换为下标向量
rr=vec2ind(r)
% 查看网络拓扑
plotsomtop(net)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python内置函数(21)——filter
- 内置函数 -- filter 和 map
- 内置函数--global() 和 local()
- python file文件操作--内置对象open
- 07 . Prometheus监控Memcached并配置Grafana
- 内置函数 -- bytes -- 字节码与字符串相互转换
- 01 . Shell详细入门介绍及简单应用
- 06 . Prometheus监控Redis并配置Grafana
- Django实现图片上传并前端页面显示
- 04 . Prometheus(联邦集群)监控MySQL
- 01 . MongoDB简介及部署配置
- 06 . Jenkins分布式构建和Pipline
- 05 . ELK Stack简介原理及部署应用
- java编程思想第四版第三章要点习题
- GoAccess分析Web日志