
使用newsom函数创建网络:
net=newsom(PR,[D1,D2,^],TFCN,DFCN,OLR,OSTEPS,TLR,TND)
PR:R个输入元素的最大值和最小值的设定值,R*2维矩阵
Di:第I层的维数,默认为[5 8]
TFCN:拓扑函数,默认为hextop
DFCN:距离函数,默认为linkdist
OLR:分类阶段学习速率,默认为0.9
OSTEPS:分类阶段的步长,默认为1000
TLR:调谐阶段的学习速率,默认为0.02
TNS:调谐阶段的领域距离,默认为1.
例子:
>> P=[rand(1,400)*2rand(1,400)]>> plot(P(1,:),P(2,:),'.','markersize',20)
>> net=newsom([0 10 1],[3 5])
>> net=train(net,P)
>> hold on
>> plotsom(net.iw{1,1},net.layers{1}.distances)
>> hold off
第二个函数:newc函数
功能:该函数用于创建一个竞争层
net=newc
net=newc(PR,S,KLR,CLR)
S:神经元的数目
KLR:Kohonen学习速度,默认为0.01
CLR:Conscience学习速度,默认为0.001
net:函数返回值,一个新的竞争层。
也可以参考附件的代码,里面有一个案例是SOM神经网络的。
SOM:close all
clf reset
figure(gcf)
echo on
pause
clc
p=zscore(data)%biaozhunhua
pause
clc
plot3(p(:,1),p(:,2),p(:,3),'*')
axis([0 1 0 1])
title('Input data')
pause
clc
net=newsom([0 10 1],[9])
pause
clc
net.trainParam.epochs=100
net=train(net,p)
pause
clc
figure
w=net.IW{1}
%IW 是输入层到第一层的权值矩阵
%LW 是中间层和输出层,也就是神经元到神经元的权值
%b 是第Ni层的偏向向量
plotsom(net.IW{1,1},net.layers{1}.distances)
pause
clc
a=sim(net,[0.60.8])
echo off
SOM神经网络也属于自组织型学习网络,只不过更特殊一点它属于自组织特征的映射网络。该网络是由一个全连接的神经元阵列组成的无教师,自组织,自学习的网络。kohonen认为,处于空间中不同区域的神经元有着不同的分工,当一个神经网络接受外界输入模式时,将会分为不同的反映域,各区域对于输入模式具有不同的相应特征。
%随机生成1000个二维向量,作为样本,并绘出其分布P = rands(2,1000)
plot(P(1,:),P(2,:),'+r')
title('初始随机样本点分布')
xlabel('P(1)')
ylabel('P(2)')
%建立网络,得到初始权值
net=newsom([0 1 0 1],[5 6])
w1_init=net.iw{1,1}
%绘出初始权值分布图
figure
plotsom(w1_init,net.layers{1}.distances)
%分别对不同的步长,训练网络,绘出相应的权值分布图
for i=10:30:100
net.trainParam.epochs=i
net=train(net,P)
figure
plotsom(net.iw{1,1},net.layers{1}.distances)
end
%对于训练好的网络,选择特定的输入向量,得到网络的输出结果
p=[0.50.3]
a=0
a = sim(net,p)
SOM神经网络执行的时候,每次执行后的结构不一样,原因是每一次激发的神经元不一样,但是无论激活那个神经元,最后的分类结果不会改变。
缺点:就是有的神经元的初始权值向量里输入向量太远以至于他从未在竞争中获胜,因而也从未得到学习,就形成了死神经元。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)