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

如何用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.lryc.cn/news/41637.html

相关文章:

  • 音视频技术开发周刊 | 285
  • 安装flume
  • 为工作排好优先级
  • 超专业解析!10分钟带你搞懂Linux中直接I/O原理
  • 【C++】面试101,用两个栈实现队列,包含min函数的栈,有效括号序列,滑动窗口的最大值,最小的K个数,倒置字符串,排序子序列,跳跃,数字三角形,蓝肽子序列
  • WPF 认识WPF
  • 【建议收藏】PHP单例模式详解以及实际运用
  • 【十二天学java】day04-流程控制语句
  • Pandas 与 PySpark 强强联手,功能与速度齐飞
  • 【Zabbix实战之部署篇】docker部署Zabbix+grafana监控平台
  • acm省赛:高桥和低桥(三种做法:区间计数、树状数组、线段树)
  • stm32-定时器详解
  • 《硬件架构的艺术》读书笔记:Chapter 1 亚稳态的世界
  • 开箱即用的密码框组件
  • ChatGPT能否取代程序员?
  • 案例分享 | 金融微服务场景下如何提升运维可观测性
  • CentOS8提高篇3:Centos8安装播放器(mplayer vlc)
  • MySQL-存储过程
  • 经典七大比较排序算法 · 下 + 附计数和基数排序
  • HTTPS协议,看这篇就够了
  • C语言学习之路--结构体篇
  • 【LINUX】初识文件系统
  • 金三银四Java面试题及答案整理(2023最新版) 持续更新
  • 7个角度,用 ChatGPT 玩转机器学习
  • 关于多层板,你了解多少?
  • 使用sqlalchemy-gbasedbt连接GBase 8s数据库
  • 前端如何丢掉你的饭碗?
  • 栈、队列、优先级队列的模拟实现
  • JMM内存模型
  • Linux- 系统随你玩之--玩出花活的命令浏览器-双生姐妹花