gusucode.com > 《MATLAB神经网络超级学习手册》随书光盘源码程序 > code/10/N10_8.m
clc clear % 设定样本数据 m=9; n=9; P=rand(m,n); for i=1:m for j=1:n if P(i,j)>0.8 P(i,j)=1; else P(i,j)=0; end end end %转置后符合神经网络的输入格式 P=P'; %newsom建立SOM网络,竞争层为7*7=49个神经元 net=newsom(minmax(P),[6 6]); plotsom(net.layers{1}.positions) %5次训练的步数 a=[5 20 40 80 160 320 640 1280]; % 随机初始化一个向量 yc=rands(9,9); % 训练次数为5次 net.trainparam.epochs=a(1); %训练网络和查看分类 net=train(net,P); %仿真网络 y=sim(net,P); yc(1,:)=vec2ind(y); figure(1) subplot(2,2,1); plotsom(net.IW{1,1},net.layers{1}.distances) % 训练次数为20次 net.trainparam.epochs=a(2); % 训练网络和查看分类 net=train(net,P); %仿真网络 y=sim(net,P); yc(2,:)=vec2ind(y); subplot(2,2,2); plotsom(net.IW{1,1},net.layers{1}.distances) % 训练次数为40次 net.trainparam.epochs=a(3); % 训练网络和查看分类 net=train(net,P); %仿真网络 y=sim(net,P); yc(3,:)=vec2ind(y); subplot(2,2,3); plotsom(net.IW{1,1},net.layers{1}.distances) % 训练次数为80次 net.trainparam.epochs=a(4); % 训练网络和查看分类 net=train(net,P); %仿真网络 y=sim(net,P); yc(4,:)=vec2ind(y); subplot(2,2,4); plotsom(net.IW{1,1},net.layers{1}.distances) % 训练次数为160次 net.trainparam.epochs=a(5); % 训练网络和查看分类 net=train(net,P); %仿真网络 y=sim(net,P); yc(5,:)=vec2ind(y); figure(2) subplot(2,2,1); plotsom(net.IW{1,1},net.layers{1}.distances) % 训练次数为320次 net.trainparam.epochs=a(6); % 训练网络和查看分类 net=train(net,P); %仿真网络 y=sim(net,P); yc(6,:)=vec2ind(y); subplot(2,2,2); plotsom(net.IW{1,1},net.layers{1}.distances) % 训练次数为640次 net.trainparam.epochs=a(7); % 训练网络和查看分类 net=train(net,P); %仿真网络 y=sim(net,P); yc(7,:)=vec2ind(y); subplot(2,2,3); plotsom(net.IW{1,1},net.layers{1}.distances) % 训练次数为1280次 net.trainparam.epochs=a(8); % 训练网络和查看分类 net=train(net,P); %仿真网络 y=sim(net,P); yc(8,:)=vec2ind(y); subplot(2,2,4); plotsom(net.IW{1,1},net.layers{1}.distances) %网络作分类的预测 %测试样本输入 t=[0.8712 1.0000 0.1858 -0.1858 0.4918 0.7111 0.5345 0.7941 0.5941]'; %网络仿真 r=sim(net,t); %将单值向量转变成下标向量。 rr=vec2ind(r) %查看网络拓扑学结构 figure(3) plotsomtop(net) %查看临近神经元直接的距离情况 figure(4) plotsomnd(net) %查看每个神经元的分类情况 figure(5) plotsomhits(net,P)