求助!!!有监督的SOM的程序的问题
			 
			 
			
		
		
		
			
			求助!有监督的SOM的程序的问题 
请各位大侠帮帮忙,我现在想要建立一个有监督的SOM神经网络,它的结构我是这样建立的:输入层输入的样本的维数为5,竞争层的神经元数为10个,结构是2X10,输出层有两个神经元,相邻的各层神经元均相连,相邻神经元的权值都按照原SOM的权值调整公式进行调整~ 
哪位大侠能帮我编一下程序,谢谢啦!!!~ 
 
我自己编了一个,可是结果不理想,请大家帮忙看一下: 
 
clc 
clear all 
P=load('TrainSample.txt'); % 读入样本数据 
[m n]=size(P); % 输入样本矩阵的大小 
% 初始化 
Itera=100; 
Learn_Rate=zeros(Itera,1); 
Learn_Rate(1)=0.9; 
Compet_Neuron=10; 
Neighbor_Distance=1; 
Neighbor_Weight=zeros(Compet_Neuron,4); % 初始化为全零的数组,每行代表每个竞争层神经元四邻域内的神经元的权值 
for i=1:m 
    Weight_Input_Compet{i}=rand(Compet_Neuron,n); % 定义m个权值矩阵 
    Weight_Compet_Output{i}=zeros(Compet_Neuron,2); 
end 
Label=zeros(m,1); 
% 开始训练 
for i1=1:Itera 
     
    X=P(i1,:)'; % 输入样本 
    X(1:3)=(X(1:3)-min(X(1:3)))/(max(X(1:3))-min(X(1:3))); % 将样本向量归一化 
     
    % 计算输入样本与权值Weight_Input_Compet的欧氏距离,欧氏距离最小的神经元为获胜神经元 
    for i2=1:Compet_Neuron 
        Distance(i2)=norm(X-Weight_Input_Compet{i1}(i2,:)');     
    end 
    for i3=1:Compet_Neuron 
        if(Distance(i3)==min(Distance(1:Compet_Neuron))) 
            Win_Neuron=i3; 
        end 
    end 
         
    % 更新     
    Weight_Input_Compet{Win_Neuron}(Win_Neuron,1:n)=Weight_Input_Compet{Win_Neuron}(Win_Neuron,1:n)+Learn_Rate(i1)*(X'-Weight_Input_Compet{Win_Neuron}(Win_Neuron,1:n)); % 更新输入层到竞争层的权值Weigh_Input_Compet 
    Weight_Compet_Output{Win_Neuron}(Win_Neuron,1:2)=Weight_Compet_Output{Win_Neuron}(Win_Neuron,1:2)+Learn_Rate(i1)*(X(4:5)'-Weight_Compet_Output{Win_Neuron}(Win_Neuron,1:2)); % 更新竞争层到输出层的权值Weigh_Compet_Output 
    if(Learn_Rate>=0.01) 
        Learn_Rate(i1)=Learn_Rate(1)*(1-i1/Itera); % 更新学习率 
    end 
   % Weight_Compet_Output{Win_Neuron} 
end 
Weight_Input_Compet{1:m} 
Weight_Compet_Output{1:m} 
 
 
输入层的样本的形式是这样的:[x,y,g,c1,c2],其中:x,y为图像中个像素点的坐标值,g为对应像素点的梯度值,c1,c2为0或1的组合,表示的是该样本代表的类别;输出层是这样的:[c1,c2]为0、1组合,代表类别。 
希望各位大侠帮帮忙,谢谢啦!!!!!~
		 
		
		
		
		
		
		
		
	 |