SOFM 网络的MATLAB实现

                                                

    MATLAB 的 NN Toolbox 提供了丰富的函数建立神经网络,主要包括神经网络函数、权值函数、网络的输入函数、传递函数、初始化函数、性能函数、学习函数、自适应函数、以及训练函数等。因此熟练掌握好建立、学习、训练网络的 NNToolbox 非常必要,下面以一个具体的实例说明 SOFM 网络实现仿真的全过程。

SOFM 网络的建立

MATLAB 中 建 立 SOFM 网 络 的 专 用 函 数 是 newsom ( ) , 其 语 法 格 式 为newsom(P,[D1,D2,D3,…,Di]),newsom( )函数返回一个新的自组织特征映射。其中,输入矢量矩阵 P 为 R×2 维矩阵,R 为输入矢量的个数,并且在输入矩阵 P 中必须指明每一个输入矢量的最大、最小范围;i 表示网络层的维数大小。下面结合一个实例介绍一下建立 SOFM 的过程:假设我们随机生成 100 个二维向量,作为样本,并对这些输入向量分类,并绘制其分布。使用默认的函数距离来计算距离。Matlab程序及结果图如下:

%% 1、SOFM网络的建立
clc;
clear;
%随机生成 100 个二维向量,作为样本,并绘制其分布
P = rands(2,100); 				%随机生成100个点,第一行为横坐标,第二行为纵坐标,每个数的范围都是[-1,1]
plot(P(1,:),P(2,:),'+r')		%在二维坐标上画出这100个点
title('初始随机样本点分布');	%
xlabel('P(1)');
ylabel('P(2)');

%建立网络,得到初始权值
net = newsom([0 1;1 2],[5 6]);	%[0 1;1 2]这里限定了初始权值的范围,求取输入向量的最大值最小值,也是为了得到初始权值
w1_init=net.iw{1,1}
%绘制出初始权值分布图
figure;
plotsom(w1_init,net.layers{1}.distances)

%% 2、SOFM网络的训练
for i = 10:30:100		%每循环一次,加30,共训练4次,分别是10,40,70,100
net.trainParam.epochs = i;
net = train(net,P);
figure;
plotsom(net.iw{1,1},net.layers{1}.distances)
end

                               图1


2


                                             图3


图4说明:

1、图1为二维点的分布。

2、图2为,权值分布,其实总共有60个点,因为[5,6]代表竞争层有30个神经元,而输入层只有2个,即每个竞争层神经元对应着2个输入层的阈值,即二维的点,所以共有60个点都重合了。有些书对于此建立网络的方法的解读,是求取神经元的最大值和最小值,道理是一样的,都是为了把初始阈值设置为最大值和最小值的平均值。向量为R*2,R为输入向量的维数。

3、图3,为训练10次的结果,图4为训练100次的结果。


  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值