其它神经网络

【例子】matlab工具箱训练一个SOM神经网络

作者 : 老饼 发表日期 : 2023-03-10 07:27:39 更新日期 : 2023-03-17 21:49:18
本站原创文章,转载请说明来自《老饼讲解-BP神经网络》www.bbbdata.com



本文展示如何用matlab工具箱训练一个SOM神经网络的DEMO

并讲解其中的代码含义和相关使用说明



     01.SOM神经网络DEMO代码     



本节展示一个用matlab工具箱实现的SOM神经网络代码DEMO



     本文说明    


下面,我们先随机初始化一些样本点,
然后调用matlab的神经网络工具箱训练一个SOM神经网络
并借此DEMO讲解如何用matlab工具箱SOM神经网络的使用




     SOM神经网络DEMO代码    


% 本demo展示用matlab工具箱训练一个SOM神经网络
% 生成用于聚类的数据
rand('seed',70);                                   % 随机种子,设定随机种子是为了每次的结果一样
dataC = [2.5,2.5;7.5,2.5;2.5,7.5;7.5,7.5]';        % 生成四个样本中心
sn = 80;                                           % 样本个数
X = rand(2,sn)+dataC(:,mod(1:sn,4)+1);             % 随机生成样本点
											       
% 调用工具箱训练一个SOM网络                        
net = selforgmap([3 5]);                           % 建立一个SOM神经网络
net = train(net,X);                                % 训练网络
W   = net.IW{1};                                   % 网络的权重,也即各个聚类中心的位置
y   = net(X);                                      % 用训练好的网络进行预测
classes = vec2ind(y);                              % 将预测结果由one-hot格式转为类别索引

% 绘图
plot(X(1,:),X(2,:),'*');                           % 原始样本
hold on 
plot(W(:,1),W(:,2),'or','MarkerFaceColor','g');    % 网络训练好的聚类中心




     运行结果    


运行结果如下
  
 绿色的隐神经元(聚类中心),红色的是样本






     02. matlab的SOM神经网络使用解说     



本节讲解matlab工具箱如何训练一个SOM神经网络,及一些常用的问题



     如何训练一个SOM神经网络     


从上面的例子我们可以看到,
使用selforgmap函数就可以建立一个SOM神经网络,
然后用train函数对网络进行训练(需要传入训练的数据),
最后把要预测的样本传入训练好的net中,就可以得到预测结果 
如下
      net = selforgmap([3 5]);      
   net = train(net,X);               
   y     = net(X);                       

 PASS:selforgmap中的[3 5]用于指定隐节点拓扑为3*5,即15个隐节点
✍️关于selforgmap的入参说明
selforgmap共有5个入参:
dimensions    :行向量,它定义了隐层神经元尺寸                                
   例如[8 3]定义了2维(8*3)的隐层           
 coverSteps     :在该步数之后,领域距离<=1,即不再更新邻域神经元  
 initNeighbor  :初始的邻域阈值                                                           
 topologyFcn  :隐层拓扑结构函数                                                        
 distanceFcn    :拓扑距离计算函数                                                        
 默认参数为:selforgmap([8 8],100,3,'hextop',linkdist')            




     常见问题    


 如何将one-hot形式的判别结果转为类别序号
net(X)得到分类结果的是one-hot形式,
即得到的结果是这种形式
为了直接得到类别的序号3,而不是
可以通过vec2ind函数将转为3
  
如何查看类别中心
 
SOM神经网络的权重W就是各个类别中心
用net.IW{1}就可以提取出来
如下,就是15个聚类中心的位置
 




     相关的绘图函数     


另外,工具箱还附带了相关的绘图函数
可以画出较好看的SOM相关图片
    👉plotsomhits   
👉plotsomnc   
👉plotsomnd   
    👉plotsomplanes  
    👉plotsompos   
    👉plotsomtop       
但基本都是只有数据是二维时才能使用/或才具有意义
因此老饼不再讲解,需要了解的自行在matlab里help一下







  End  





联系老饼