当前位置: 首页 > article >正文

如何用matlab工具箱训练一个SOM神经网络

本站原创文章,转载请说明来自《老饼讲解-BP神经网络》 bp.bbbdata.com

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

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

- 01.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([35]);% 建立一个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')

- 如何预测类别 -


如果要预测样本X的类别,
只需使用net(X)就可以得到样本的分类类别
如果net(X)输出[0,0,1],则代表类别是第3类

如何将one-hot形式的判别结果转为类别序号
net(X)得到分类结果的是one-hot形式,
即得到的结果是[0 ,0 ,1]这种形式
为了直接得到类别的序号3,而不是[0 ,0 ,1],
可以通过vec2ind函数将[0 ,0 ,1]转为3
如下

- 如何查看类别中心 -


SOM神经网络的权重W就是各个类别中心
用net.IW{1}就可以提取出来
如下,就是15个聚类中心的位置


- 相关的绘图函数 -


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


相关文章

《BP神经网络梯度推导》

《BP神经网络提取的数学表达式》

《一个BP的完整建模流程》


http://www.kler.cn/a/2028.html

相关文章:

  • synchronized 加锁 this 和 class 的区别
  • QT | 编写一个简单的上位机
  • GEC6818开发板JPG图像显示,科大讯飞离线语音识别包Linux_aitalk_exp1227_1398d7c6运行demo程序,开发板实现录音
  • 思维导图模板怎么制作?提供几种思路
  • chatgpt3.5和chatgpt4的区别
  • GPT4论文翻译 by GPT4 and Human
  • 网络安全之防火墙
  • Vue2项目总结-电商后台管理系统
  • 软件测试拿了几个20K offer,分享一波面经
  • “工作三年,跳槽要求涨薪50%”,合理吗?
  • LeetCode:35. 搜索插入位置
  • 【洛谷刷题】蓝桥杯专题突破-深度优先搜索-dfs(4)
  • 100天精通Python(可视化篇)——第80天:matplotlib绘制不同种类炫酷柱状图代码实战(簇状、堆积、横向、百分比、3D柱状图)
  • python网上选课系统django-PyCharm
  • 新闻稿的写作格式
  • 【国产FPGA】国产FPGA搭建图像处理平台
  • 【YOLOv8/YOLOv7/YOLOv5/YOLOv4/Faster-rcnn系列算法改进NO.59】引入ASPP模块
  • RK3588平台开发系列讲解(NPU篇)RKNN SDK API流程
  • ChatGPT助力校招----面试问题分享(四)
  • Python Logging