53、基于竞争层的竞争学习(matlab)

1、基于竞争层的竞争学习简介及原理

竞争学习是一种无监督学习方法,其中的竞争层神经元之间互相竞争以学习输入模式的表示。竞争学习的一个经典模型是竞争神经网络(Competitive Neural Network,简称CNN),其核心部分是竞争层,包含多个竞争神经元,它们通过竞争机制来学习输入数据的特征。

竞争学习的原理如下:

  1. 模型初始化:竞争层中的每个竞争神经元具有随机初始化的权重向量,用于与输入数据进行比较。
  2. 竞争机制:当接收到输入数据时,竞争神经元之间进行竞争,即各自计算与输入数据的相似度,并选择最能代表输入数据的神经元作为胜者。
  3. 胜者更新:胜者神经元会调整自己的权重向量,使其更好地匹配输入数据,同时关闭其他神经元的更新过程,以保证只有一个胜者。
  4. 学习规则:竞争学习过程中的权重更新规则通常遵循希伯来学习规则(Hebbian Learning Rule),即“同胞竞争,异胞挤压”,即强化与输入模式相符的权重,抑制与输入模式不符的权重。
  5. 学习迭代:重复上述竞争和胜者更新过程,直到模型收敛或达到设定的迭代次数。

竞争学习在模式分类、特征提取等领域有着广泛的应用,能够有效地从输入数据中提取关键特征,并生成对应的内部表示。竞争学习的训练过程是无监督的,只依赖于输入数据的统计特性,具有较强的自组织和特征抽取能力。

2、基于竞争层的竞争学习说明

1)说明

竞争层中的神经元可通过学习来表示输入向量在输入空间中出现的不同区域

2)解决案例

P 是一组随机生成但聚类的测试数据点。竞争网络将用于将这些点分成若干自然类。

3、数据集

数据集生成代码

bounds = [0 1; 0 1];   % 聚类中心在这些范围内
clusters = 8;          % 簇数量
points = 10;           % 每个簇中的点数
std_dev = 0.05;        % 每个聚类的标准差
x = nngenc(bounds,clusters,points,std_dev);

数据集显示代码

% 绘图
figure(1)
plot(x(1,:),x(2,:),'+r');
title('Input Vectors');
xlabel('x(1)');
ylabel('x(2)');

视图效果

4、 COMPETLAYER 接受两个参量,即神经元数量和学习率。

说明

配置网络输入(通常由 TRAIN 自动完成),并绘制初始权重向量以查看其分类尝试过程。

代码

figure(2)
net = competlayer(8,.1);
net = configure(net,x);
w = net.IW{1};
plot(x(1,:),x(2,:),'+r');
hold on;
circles = plot(w(:,1),w(:,2),'ob');

视图效果

5、训练竞争层

在训练竞争层网络时,有一些注意事项需要注意:

  1. 数据预处理:在输入数据集训练之前,需要对数据进行预处理,如归一化处理,以确保不同特征之间的数值范围相同,避免某些特征对竞争过程产生过大影响。

  2. 初始权重选择:竞争层的初始权重设置可能会影响网络的收敛速度和收敛质量,因此需要仔细选择初始权重。常见的初始化方法包括随机初始化和基于数据的初始化方法。

  3. 学习率和邻域函数的选择:学习率和邻域函数的选择对竞争层的训练过程至关重要。学习率的选择会影响权重调整的速度,而邻域函数的选择则会影响胜者神经元周围神经元的权重调整程度。

  4. 迭代次数:需要根据数据集的特点和网络的复杂度来确定训练的迭代次数,以确保网络能够充分学习数据集的特征。

  5. 模型评估:在训练过程中,需要对模型进行评估,监测模型的收敛情况,以及绘制训练过程中的损失函数曲线等,以便及时调整网络参数和模型结构。

  6. 参数调优:在网络训练过程中,可能需要调整学习率、邻域函数的衰减率及初始值等参数,以达到更好的训练效果。

  7. 可视化分析:最后,可以通过可视化分析来观察竞争层的训练效果,例如可视化竞争层的权重矩阵,观察不同输入数据在竞争层的分布情况,以验证模型的有效性。

在训练竞争层网络时,注意以上事项可以帮助提高模型的训练效果,加快网络的收敛速度,并确保竞争层能够充分学习输入数据的特征。

代码

net.trainParam.epochs = 7;
net = train(net,x);

视图效果

 

6、 图上绘制更新后的层权重

代码

w = net.IW{1};
delete(circles);
plot(w(:,1),w(:,2),'ob');

视图效果

7、 使用竞争层作为分类器

1)说明

使用竞争层作为分类器,其中每个神经元都对应于一个不同的类别。将一个输入向量 X1 定义为 [0; 0.2]
输出 Y 指示哪个神经元正在响应,从而指示输入属于哪个类。

代码

x1 = [0; 0.2];
y = net(x1)y =10000000

8、总结

在MATLAB中实现基于竞争层的竞争学习可以利用自组织特征映射(Self-Organizing Map,简称SOM)算法。SOM是竞争学习的一种形式,其将输入数据在一个高维网格网络中进行竞争学习,从而实现特征提取和数据可视化。

以下是使用MATLAB实现基于竞争层的竞争学习的一般步骤总结:

  1. 准备数据:准备输入数据集,确保数据已经进行归一化处理。
  2. 初始化权重:初始化竞争层(SOM)网络的权重矩阵,每个神经元对应一个权重向量,与输入数据的维度相同。
  3. 训练模型:迭代输入数据集,对每个输入数据计算与各个神经元的距离,并选择最近的神经元作为胜者,根据胜者神经元和邻域函数更新权重矩阵。
  4. 学习率调整:随着模型训练的进行,逐渐减小学习率和邻域函数的大小,以便在后期更加精细地调整权重。
  5. 可视化结果:可视化训练后的竞争层权重矩阵,观察不同输入数据在竞争层上的分布情况。

在MATLAB中,可以利用自带的SOM工具箱或者编写自定义代码的方式实现基于竞争层的竞争学习。通过调整模型参数、学习率和迭代次数,可以对模型进行优化和调整,以获得更好的特征提取效果。此外,可以通过可视化竞争层学习后的特征表示,进一步理解模型学习到的数据结构和特征。

9、源代码

代码

%% 基于竞争层的竞争学习
%竞争层中的神经元可通过学习来表示输入向量在输入空间中出现的不同区域
%P 是一组随机生成但聚类的测试数据点。竞争网络将用于将这些点分成若干自然类。
%% 数据集
bounds = [0 1; 0 1];   % 聚类中心在这些范围内
clusters = 8;          % 簇数量
points = 10;           % 每个簇中的点数
std_dev = 0.05;        % 每个聚类的标准差
x = nngenc(bounds,clusters,points,std_dev);% 绘图
figure(1)
plot(x(1,:),x(2,:),'+r');
title('Input Vectors');
xlabel('x(1)');
ylabel('x(2)');
%COMPETLAYER 接受两个参量,即神经元数量和学习率。
%配置网络输入(通常由 TRAIN 自动完成),并绘制初始权重向量以查看其分类尝试过程。
figure(2)
net = competlayer(8,.1);
net = configure(net,x);
w = net.IW{1};
plot(x(1,:),x(2,:),'+r');
hold on;
circles = plot(w(:,1),w(:,2),'ob');
%训练竞争层
net.trainParam.epochs = 7;
net = train(net,x);
%图上绘制更新后的层权重
w = net.IW{1};
delete(circles);
plot(w(:,1),w(:,2),'ob');
%使用竞争层作为分类器
%使用竞争层作为分类器,其中每个神经元都对应于一个不同的类别。将一个输入向量 X1 定义为 [0; 0.2]
%输出 Y 指示哪个神经元正在响应,从而指示输入属于哪个类。
x1 = [0; 0.2];
y = net(x1)

工程文件

https://download.csdn.net/download/XU157303764/89498417

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/863546.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

运营商、银行、国企等单位开发岗24届Offer薪资与福利汇总

本文介绍24届校园招聘中,地理信息科学(GIS)专业硕士研究生所得Offer的整体薪资情况、福利待遇等。 在2024届秋招与春招中,我累计投递了170余个单位,获得17个Offer;平均每投递10个简历才能获得1个Offer。说句…

flink-触发器Trigger和移除器Evictor

窗口原理与机制 图片链接:https://blog.csdn.net/qq_35590459/article/details/132177154 数据流进入算子前,被提交给WindowAssigner,决定元素被放到哪个或哪些窗口,同时可能会创建新窗口或者合并旧的窗口。每一个窗口都拥有一个…

Pc端多功能视频混剪工具/便携版打开即用

PC便携版 视频批量剪辑大师,全自动剪辑神器,会打字就能做视频 多功能,视频混剪,视频配音,文字生成语音,图片合成视频,自动识别音频并生成字幕等功能 链接:https://pan.baidu.com/…

文件操作与管理

程序经常需要访问文件和目录,读取文件信息或写入文件信息,在Python语言中对文件的读写是通过文件对象(file object)实现的。Python的文件对象也称为类似文件对象或流(stream),因为Python提供一种…

<电力行业> - 《第9课:输电(二)》

4 输送电能流程 输送电能总共有:发电站→升压变压器→高压输电线→降压变压器→用电单位等五个流程。 电力工业初期,发电厂建在电力用户附近,直接向用户送电,所以那个时候只有发电和用电两个环节。 随着电力生产规模和负荷中心规…

烧结刚玉砂轮片 磨具用晶谷低温陶瓷结合剂玻璃粉

晶谷CBN 砂轮磨具用低温陶瓷结合剂玻璃粉的一些特点如下: - 软化点:通常为450~650度; - 膨胀系数:50~12010-7; - 粒径:300~3000目(可按要求订做); - 外观颜色&#xff…

h5兼容table ,如何实现h5在app内使用h5渲染table表格而且实现横屏预览?

压图地址 横屏div 通过css 实现 transform: rotate(90deg); transformOrigin: 50vw 50vw ; height: 100vw; width: 100vh;<divclass"popup-box":style"{transform: originSet 0 ? rotate(90deg) : ,transformOrigin: originSet 0 ? 50vw 50vw : ,height…

GuLi商城-商品服务-API-三级分类-删除-逻辑删除

注意&#xff1a;官方文档说logic配置可以省略&#xff0c;代码中直观些&#xff0c;配上吧 逻辑删除注解&#xff1a; 实体类字段上加逻辑删除注解&#xff1a; 启动nacos&#xff1a; 启动商品服务&#xff1a; postman测试&#xff1a; 数据库字段值改成了0&#xff0c;说明…

Linux----> tail、cat、more、head、less的用法详解

1.tail命令&#xff1a;用于查看文件的最后几行内容。 基本用法&#xff1a;tail [选项] [文件] 常用选项&#xff1a; -n <行数>&#xff1a;显示最后的 <行数> 行。-f&#xff1a;实时显示文件新增内容&#xff0c;通常用于查看日志文件。 示例&#xff1a;…

数据恢复篇:如何在没有备份的情况下从恢复已删除的照片

许多用户更喜欢将他们的私人照片保存在他们的 Android 设备上的一个单独的安全空间中&#xff0c;以确保他们的记忆不仅被存储&#xff0c;而且受到保护。这就是“安全文件夹”功能派上用场的地方。您可以使用 PIN 码、密码、指纹或图案锁定此文件夹&#xff0c;即使您的设备落…

[小试牛刀-习题练]《计算机组成原理》之数据信息的表示、运算方法与运算器

【数据信息的表示运算方法与运算器】 1、【机器码转换】X-0.11111111&#xff0c;X的补码是 1.00000001 。 最高位符号位为负值&#xff1a; 反码法——绝对值按位取反末位加一&#xff0c;1.000000000.000000011.00000001扫描法——从右往左找到第一个为1的&#xff…

常用字符串方法<python>

导言 在python中内置了许多的字符串方法&#xff0c;使用字符串方法可以方便快捷解决很多问题&#xff0c;所以本文将要介绍一些常用的字符串方法。 目录 导言 string.center(width[,fillchar]) string.capitalize() string.count(sub[,start[,end]]) string.join(iterabl…

ffmpeg编码图象时报错Invalid buffer size, packet size * < expected frame_size *

使用ffmpeg将单个yuv文件编码转为jpg或其他图像格式时&#xff0c;报错&#xff1a; Truncating packet of size 11985408 to 3585 [rawvideo 0x1bd5390] Packet corrupt (stream 0, dts 1). image_3264_2448_0.yuv: corrupt input packet in stream 0 [rawvideo 0x1bd7c60…

在本地和Linux之间传输文件

1.打开本地的cmd窗口 2. 然后按这个链接的说法在cmd中远程连接Linux&#xff08;技术|如何在 Linux 中使用 sFTP 上传或下载文件与文件夹&#xff09; 3. 看这个链接里面的sftp命令进行本地和Linux之间的文件互传 &#xff08;https://www.cnblogs.com/niuben/p/13324099.htm…

【嵌入式CLion】进阶调试——WSL下的Linux体验

说明&#xff1a; 1&#xff0c;这里所指的嵌入式其实是指嵌入式微控制器MCU&#xff0c;即单片机 2&#xff0c;万事开头难&#xff0c;本文目前提供了WSL工具链的搭建&#xff0c;后面会持续更新 一、启用RTOS集成 在搭建WSL工具链之前&#xff0c;先讲一下集成的RTOS功能&a…

D-MAX纠偏软件Fife MAX Terminal软件MAX-Oi软件

D-MAX纠偏软件Fife MAX Terminal软件MAX-Oi软件

SpringBoot的自动配置核心原理及拓展点

Spring Boot 的核心原理几个关键点 约定优于配置&#xff1a; Spring Boot 遵循约定优于配置的理念&#xff0c;通过预定义的约定&#xff0c;大大简化了 Spring 应用程序的配置和部署。例如&#xff0c;它自动配置了许多常见的开发任务&#xff08;如数据库连接、Web 服务器配…

通过Python脚本实现字符画

效果 讲解&#xff1a; 用于将3D视图的帧缓冲区转换为字符画&#xff0c;并将字符画输出到文本编辑器中。 首先&#xff0c;获取当前绑定的帧缓冲区、视口信息和视图像素。 然后&#xff0c;将像素矩阵转化为字符串&#xff0c;并将字符串写入到文本编辑器中。 设置文本编辑…

bmob Harmony快速开发手机号一键登录功能

最近用Bmob的鸿蒙SDK尝试了Harmony开发&#xff0c;做了一个几乎每个应用都会有的功能&#xff1a;手机号码短信验证码一键注册登录的功能&#xff0c;感觉简直爽的不要不要的&#xff0c;ArkUI可见即可得的UI交互设计体验&#xff0c;配合Bmob后端云一如既往简单易用的风格&am…

使用Perplexity打造产品的27种方式

ChatGPT和Perplexity等聊天机器人正迅速成为产品经理的首选助手。以下是一份全面的指南&#xff0c;介绍PM如何在日常工作中使用Perplexity&#xff0c;该指南基于300多份回复和30次电话后的总结。 理解并制定增长战略&#xff1a;例如&#xff0c;解释增长会计的基本原理&…