SOM神经网络
- 格式:docx
- 大小:922.43 KB
- 文档页数:28
som分类算法
SOM(Self-Organizing Map,自组织映射网络)是一种非监督学习的人工神经网络算法,主要用于数据可视化和特征分析。
它通过将高维输入空间中的样本数据映射到低维的二维或一维阵列(称为地图或网格)上,使得相似的数据点在映射后的空间中距离较近,从而保持了原始数据的拓扑结构。
SOM通过竞争学习和协作训练过程,使每个映射单元代表特定区域的数据模式,并能反映数据集的内在结构和分布情况。
该算法广泛应用于聚类分析、数据挖掘、图像压缩等领域。
SOM神经⽹络极其matlab实现⼀、算法流程拓扑关系确定后,开始计算过程,⼤体分成⼏个部分:1)初始化:每个节点随机初始化⾃⼰的参数。
每个节点的参数个数与Input的维度相同。
2)对于每⼀个输⼊数据,找到与它最相配的节点。
假设输⼊时D维的,即 X={x_i, i=1,...,D},那么判别函数可以为欧⼏⾥得距离:3) 找到激活节点I(x)之后,我们也希望更新和它临近的节点。
令S_ij表⽰节点i和j之间的距离,对于I(x)临近的节点,分配给它们⼀个更新权重:简单地说,临近的节点根据距离的远近,更新程度要打折扣。
4)接着就是更新节点的参数了。
按照梯度下降法更新:迭代,直到收敛。
⼆、实现⽅法1 . SOM是由输⼊层和竞争层组成的单层神经⽹络,输⼊层是⼀维的神经元,有n个节点。
竞争层是⼆维的神经元,按⼆维的形式排列成节点矩阵,有M=m^2个节点。
输⼊层的神经元和竞争层的神经元都有权值连接,竞争层节点相互间也可能有局部连接。
竞争层也叫输出层。
⽹络中有两种连接权值,⼀种是神经元对外部输⼊反应的连接权值,另外⼀种是神经元之间的特征权值,它的⼤⼩控制着神经元之间交互作⽤的强弱。
SOM算法是⼀种⽆导师的聚类法,它能将任意维输⼊模式在输出层映射成⼀维或者⼆维离散图形,并保持其拓扑结构不变,即在⽆导师的情况下,通过对输⼊模式的⾃组织学习,在竞争层将分类结果表⽰出来,此外,⽹络通过对输⼊模式的反复学习,可以使连接权值空间分布密度与输⼊模式的概率分布趋于⼀致,即连接权向量空间分布能反映输⼊模式的统计特征。
SOM依据拓扑⽅程排列神经元。
girdtop ( )⽹格拓扑结构hextop( )六⾓形拓扑结构randtop( )随机拓扑结构神经元之间的距离通过距离函数计算,如:dist( )boxdist( )linkdist( )mandist( )和⾃组织竞争⽹络⼀样,som⽹络可以⽤来识别获胜神经元i*。
不同的是,⾃组织竞争⽹络只修正获胜神经元,⽽SOM⽹络依据Kohonen学习规则,要同时修正获胜神经元附近区域Ni(d)内所有神经元。
数据挖掘之神经⽹络SOM算法/*神经⽹络SOM算法思想:分为输⼊层和竞争层,输⼊层就是样本的输⼊,假如我现在有5个样本A,B,C,D,E,他们是5维向量,竞争层是10*10的⼆维平⾯,相当于100个神经元,这些神经元也是5维向量,这些神经元对输⼊向量进⾏竞争,最后只有⼀个*/#include<fstream.h>#include<iomanip.h>#include<stdio.h>#include<cstdlib.h>#include<math.h>using namespace std;#define InputLayerNum 35#define OutputLayerRow 8#define OutputLayerColumn 12#define total_iteration_Num 80#define error_limit 0.0001#define efficiency 0.9int i,j,k,l,m,n;int inputMode[26][7][5];double weight[OutputLayerRow*OutputLayerColumn][InputLayerNum];int current_iteration_num=0;double study_efficiency=efficiency;double distance[OutputLayerRow*OutputLayerColumn];int neighbor_width=OutputLayerColumn;int neighbor_height=OutputLayerRow;int row[OutputLayerRow],column[OutputLayerColumn];int flag[OutputLayerRow][OutputLayerColumn];int temp_row,temp_column;int winner_row,winner_column;double min_distance=1000.0;/****************************************************///该函数初始化距离变量为0,初始化保存⽣胜出节点的位置的变量/****************************************************/void init_distance(){for(i=0;i<OutputLayerRow;i++)for(j=0;j<OutputLayerColumn;j++)distance[i*OutputLayerColumn+j]=0.0;}/****************************************************///该函数⽤于计算欧⽒距离,并找到获胜神经元/****************************************************/void eula_distance(){int ttLow,ttUp,ppLow,ppUp;ttLow=winner_column-neighbor_width/2;ttUp=winner_column+neighbor_width/2;ppLow=winner_row-neighbor_height/2;ppUp=winner_row+neighbor_height/2;if(ttLow<0) ttLow=0;if(ttUp>=OutputLayerColumn) ttUp=OutputLayerColumn-1;if(ppLow<0) ppLow=0;if(ppUp>=OutputLayerRow) ppUp=OutputLayerRow-1;for(i=ppLow;i<=ppUp;i++)for(j=ttLow;j<=ttUp;j++){if(!(flag[i][i]==100)){for(m=0;m<7;m++)for(n=0;n<5;n++)distance[i*OutputLayerColumn+j]+=pow((inputMode[l][m][n]-weight[i*OutputLayerColumn+j][m*5+n]),2);if(distance[i*OutputLayerColumn+j]<min_distance){min_distance=distance[i*OutputLayerColumn+j];temp_row=i;temp_column=j;}}}if(current_iteration_num>0){if(min_distance<=error_limit){row[temp_row]=temp_row;row[temp_column]=temp_column;flag[temp_row][temp_column]=100;}}}/****************************************************///调整权值/****************************************************/void weight_change(){int ttLow,ttUp,ppLow,ppUp;winner_row=temp_row;winner_column=temp_column;ttLow=winner_column-neighbor_width/2;ttUp=winner_column+neighbor_width/2;ppLow=winner_row-neighbor_height/2;ppUp=winner_row+neighbor_height/2;if(ttLow<0) ttLow=0;if(ttUp>=OutputLayerColumn) ttUp=OutputLayerColumn-1;if(ppLow<0) ppLow=0;if(ppUp>=OutputLayerRow) ppUp=OutputLayerRow-1;for(i=ppLow;i<=ppUp;i++)for(j=ttLow;j<=ttUp;j++){if(!(flag[i][j]==100)){for(m=0;m<7;m++)for(n=0;n<5;n++)weight[i*OutputLayerColumn+j][m*5+n]+=study_efficiency*(inputMode[l][m][n]-weight[i*OutputLayerColumn+j][m*5+n]);}}}/****************************************************///调整学习效率以及获胜节点的邻域⼤⼩/****************************************************/void paraChange(){study_efficiency=study_efficiency*(1.0-((double)current_iteration_num)/total_iteration_Num);neighbor_width=(int)(neighbor_width*(1.0-((double)current_iteration_num)/total_iteration_Num));neighbor_height=(int)(neighbor_height*(1.0-((double)current_iteration_num)/total_iteration_Num));}/****************************************************///该函数⽤于将所有输⼊模式从⽂件中读⼊,并存放在数组inputMode中//同时进⾏权值的初始化,采⽤随机赋值的⽅法/****************************************************/void initialize(){for(i=0;i<OutputLayerRow;i++) row[i]=100;for(j=0;j<OutputLayerColumn;j++) column[j]=100;for(i=0;i<OutputLayerRow;i++)for(j=0;j<OutputLayerColumn;j++) flag[i][j]=0;FILE *pf=fopen("输⼊数据.txt","a+");if(pf==NULL){cout<<"Can not input file!\n";exit(0);}for(i=0;i<26;i++)for(j=0;j<7;j++)for(k=0;k<5;k++) fscanf(pf,"%d",&inputMode[i][j][k]);//⽤于测试是否能够正确读⼊输⼊模式char character[26];for(i=0;i<26;i++) character[i]=(65+i);ofstream mode("输出数据.txt",ios::out);for(i=0;i<26;i++){mode<<character[i]<<'\n'<<endl;for(j=0;j<7;j++){for(k=0;k<5;k++) mode<<inputMode[i][j][k]<<"";mode<<"\n";}mode<<"\n\n\n";}//权值随机初始化,采⽤随机赋值的⽅法for(i=0;i<OutputLayerRow;i++)for(j=0;j<OutputLayerColumn;j++)for(k=0;k<InputLayerNum;k++)weight[i*OutputLayerColumn+j][k]=(double)(rand()%101)/100.0;//⽤于测试是否能够正确初始化权值ofstream quan("初始权值.txt",ios::out);for(i=0;i<OutputLayerRow;i++)for(j=0;j<OutputLayerColumn;j++){quan<<"\n\n\n"<<"Node["<<i+1<<"]["<<j+1<<"]"<<"\n";for(k=0;k<InputLayerNum;k++){if(k%5==0) quan<<"\n";quan<<setprecision(6)<<setiosflags(ios::fixed)<<weight[i*OutputLayerColumn+j][k]<<"";}quan<<"\n\n\n";}}int main(){int iteration_numbers[26];int total_num=0;char character[26];void test_netWork_1();void test_netWork_2();for(l=0;l<26;l++){iteration_numbers[l]=0;character[l]=(65+l);}initialize();for(l=0;l<26;l++){winner_row=OutputLayerRow/2;winner_column=OutputLayerColumn/2;while(current_iteration_num<total_iteration_Num){//迭代次数控制init_distance();eula_distance();weight_change();if(min_distance<=error_limit) break;++current_iteration_num;paraChange();}iteration_numbers[l]=current_iteration_num+1;neighbor_width=OutputLayerColumn; //修改邻域的宽度neighbor_height=OutputLayerRow; //修改邻域的⾼度study_efficiency=efficiency; //学习率重置current_iteration_num=0; //重置迭代次数min_distance=1000.0; //重置最⼩距离}/***********************************///输出部分/***********************************/for(l=0;l<26;l++) total_num+=iteration_numbers[l];ofstream iteration_num("迭代次数.txt",ios::out);for(l=0;l<26;l++){iteration_num<<character[l]<<"迭代"<<iteration_numbers[l]<<"次!\n"<<endl;if(l==25) iteration_num<<"整个训练过程共迭代"<<total_num<<"次!\n"<<endl;}ofstream all_weight("训练后所有权值.txt",ios::out);ofstream winner_weight("训练后胜出权值.txt",ios::out);for(i=0;i<OutputLayerRow;i++)for(j=0;j<OutputLayerColumn;j++){printf("\n\n\n");all_weight<<"\n\n\n"<<"Node["<<i+1<<"]["<<j+1<<"]"<<"\n";for(k=0;k<InputLayerNum;k++){if(k%5==0){printf("\n");all_weight<<"\n";}if(weight[i*OutputLayerColumn+j][k]>0.9999999) weight[i*OutputLayerColumn+j][k]=1.0;if(weight[i*OutputLayerColumn+j][k]<0.0000001) weight[i*OutputLayerColumn+j][k]=0.0;printf("%f ",weight[i*OutputLayerColumn+j][k]);all_weight<<setprecision(8)<<setiosflags(ios::fixed)<<weight[i*OutputLayerColumn+j][k]<<"";}}ofstream winner_node("获胜节点.txt",ios::out);for(i=0;i<OutputLayerRow;i++)for(j=0;j<OutputLayerColumn;j++){if(flag[i][j]==100){ //获胜节点printf("\n\n\n");winner_weight<<"\n\n\n"<<"Node["<<i+1<<"]["<<j+1<<"]"<<"\n";for(k=0;k<InputLayerNum;k++){if(k%5==0){printf("\n");winner_weight<<"\n";}if(weight[i*OutputLayerColumn+j][k]>0.9999999) weight[i*OutputLayerColumn+j][k]=1.0;if(weight[i*OutputLayerColumn+j][k]<0.0000001) weight[i*OutputLayerColumn+j][k]=0.0;printf("%f ",weight[i*OutputLayerColumn+j][k]);winner_weight<<setprecision(8)<<setiosflags(ios::fixed)<<weight[i*OutputLayerColumn+j][k]<<""; }winner_node<<"Node["<<i+1<<"]["<<j+1<<"]"<<endl;}}printf("\n");test_netWork_1();test_netWork_2();return0;}void test_netWork_1(){ofstream test1("标准测试.txt",ios::out);char character[26];for(i=0;i<26;i++) character[i]=(65+i);for(l=0;l<26;l++){for(i=0;i<OutputLayerRow;i++)for(j=0;j<OutputLayerColumn;j++) distance[i*OutputLayerColumn+j]=0.0;min_distance=1000;for(i=0;i<OutputLayerRow;i++)for(j=0;j<OutputLayerColumn;j++){for(m=0;m<7;m++)for(n=0;n<5;n++)distance[i*OutputLayerColumn+j]+=pow(inputMode[l][m][n]-weight[i*OutputLayerColumn+j][m*5+n],2);if(distance[i*OutputLayerColumn+j]<min_distance){min_distance=distance[i*OutputLayerColumn+j];temp_row=i;temp_column=j;}}test1<<character[l]<<"'s winner is Node["<<temp_row+1<<"]["<<temp_column+1<<"]"<<endl<<endl;}}/****************************************************///利⽤⾮标准数据测试训练后的⽹络/****************************************************/void test_netWork_2(){ofstream test2("⾮标准测试.txt",ios::out);char character[26];FILe *pf=fopen("⾮标准数据测试.txt","a+");if(pf==NULL){cout<<"Can not open input file!\n";exit(0);}for(i=0;i<26;i++)for(j=0;j<7;j++)for(k=0;k<5;k++) fscanf(pf,"%d",&inputMode[i][j][k]);for(i=0;i<26;i++) character[i]=(65+i);for(l=0;l<26;l++){for(i=0;i<OutputLayerRow;i++)for(j=0;j<OutputLayerColumn;j++) distance[i*OutputLayerColumn+j]=0.0;min_distance=1000;for(i=0;i<OutputLayerRow;i++)for(j=0;j<OutputLayerColumn;j++){for(m=0;m<7;m++)for(n=0;n<5;n++)distance[i*OutputLayerColumn+j]+=pow(inputMode[l][m][n]-weight[i*OutputLayerColumn+j][m*5+n],2);if(distance[i*OutputLayerColumn+j]<min_distance){min_distance=distance[i*OutputLayerColumn+j];temp_row=i;temp_column=j;}}test2<<character[l]<<"'s winner is Node["<<temp_row+1<<"]["<<temp_column+1<<"]"<<endl<<endl;}}。
基于SOM神经网络的教学认知诊断模型研究1. 内容概括本论文深入探讨了基于自组织映射(SOM)神经网络的教学认知诊断模型的研究。
SOM作为一种无监督学习方法,擅长从高维数据中提取关键特征,并将数据组织成拓扑结构相似的聚类。
在教学领域,这种能力使得SOM能够有效揭示学生的学习模式、识别知识盲点,并为个性化教学提供有力支持。
认知诊断旨在评估学生的学习状态和理解程度,是教学过程中的重要环节。
传统诊断方法往往依赖于教师的主观判断,缺乏客观性和全面性。
本研究引入SOM神经网络,构建了一个自动化、高效的诊断系统。
论文首先介绍了SOM神经网络的基本原理和教学应用现状,阐述了其在教学认知诊断中的潜力和价值。
通过理论分析和实证研究,详细探讨了模型的构建过程、学习算法以及优化策略。
实证研究部分,选取了某小学的数学课程作为研究对象,收集了学生的课堂表现、作业成绩等数据,并运用SOM神经网络进行了诊断分析。
研究结果表明,基于SOM神经网络的教学认知诊断模型能够准确识别学生的学习水平、掌握程度和知识盲点,为教师提供了有针对性的教学建议。
该模型还具有操作简便、成本低廉等优点,有望在教育领域得到广泛应用。
论文总结了研究成果,指出了研究的局限性和未来研究方向。
随着人工智能技术的不断发展和教育信息化的深入推进,基于SOM神经网络的智能诊断系统将在教育评价和教学指导方面发挥更加重要的作用。
1.1 研究背景在21世纪的教育领域,教学方法和手段的创新成为了教育改革的核心。
随着信息技术的发展,计算机科学与人工智能技术逐渐渗透到各个学科领域,为教育带来了新的机遇。
自组织映射(SOM)神经网络作为一种强大的学习工具,已经在图像识别、语音识别等领域取得了显著的成果。
研究者们开始将SOM神经网络应用于教育领域,以期提高教学质量和效果。
教学认知诊断模型是一种通过对学生学习过程中产生的数据进行分析,从而对学生的认知过程进行评估和优化的教学辅助工具。
第10章竞争学习网络158而以SOM网络为代表的非监督式学习算法则不同,它们并不需要事先对数据打标。
通过对数据的解读,它有能力挖掘数据内在联系,反而可以为人们提示数据的内部秘密。
它更像是具有自身智能的学习算法。
本书将给出两个SOM网络的应用实例,第一是有关动物聚类,第二是将SOM网络应用于城市聚类。
10.4.1 使用SOM网络进行动物聚类动物聚类实验是一个非常著名的SOM应用,它是由Kohonen教授本人于1989年给出的。
在动物聚类中,训练集给出了16种动物以及它们的基本属性,如表10-1所列。
表10-1 动物特征小中大2条腿4条腿毛蹄鬃毛羽毛猎跑飞泳鸽子 1 0 0 1 0 0 0 0 1 0 0 1 0 母鸡 1 0 0 1 0 0 0 0 1 0 0 0 0 鸭 1 0 0 1 0 0 0 0 1 0 0 0 1 鹅 1 0 0 1 0 0 0 0 1 0 0 1 1 猫头鹰 1 0 0 1 0 0 0 0 1 1 0 1 0 隼 1 0 0 1 0 0 0 0 1 1 0 1 0 鹰0 1 0 1 0 0 0 0 1 1 0 1 0 狐狸0 1 0 0 1 1 0 0 0 1 0 0 0 狗0 1 0 0 1 1 0 0 0 0 1 0 0 狼0 1 0 0 1 1 0 0 0 1 1 0 0 猫 1 0 0 0 1 1 0 0 0 1 0 0 0 虎0 0 1 0 1 1 0 0 0 1 1 0 0 狮0 0 1 0 1 1 0 0 0 1 1 0 0 马0 0 1 0 1 1 1 1 0 0 1 0 0 斑马0 0 1 0 1 1 1 1 0 0 1 0 0 牛0 0 1 0 1 1 1 0 0 0 0 0 0这里定义了16种动物基本属性,包括大小、腿的个数、毛发类型等。
所有属性均使用0或者1表示,0表示否定,1表示肯定。
将这些信息作为SOM网络的输入,通过训练,期望得到的结果是SOM竞争层中的特定神经元应该会对较为接近的生物做出响应。
SOM神经网络第4章 SOM自组织特征映射神经网络生物学研究表明,在人脑的感觉通道上,神经元的组织原理是有序排列的。
当外界的特定时空信息输入时,大脑皮层的特定区域兴奋,而且类似的外界信息在对应的区域是连续映像的。
生物视网膜中有许多特定的细胞对特定的图形比较敏感,当视网膜中有若干个接收单元同时受特定模式刺激时,就使大脑皮层中的特定神经元开始兴奋,输入模式接近,与之对应的兴奋神经元也接近;在听觉通道上,神经元在结构排列上与频率的关系十分密切,对于某个频率,特定的神经元具有最大的响应,位置相邻的神经元具有相近的频率特征,而远离的神经元具有的频率特征差别也较大。
大脑皮层中神经元的这种响应特点不是先天安排好的,而是通过后天的学习自组织形成的。
据此芬兰Helsinki大学的Kohonen T.教授提出了一种自组织特征映射网络(Self-organizing feature Map,SOM),又称Kohonen网络[1-5]。
Kohonen认为,一个神经网络接受外界输入模式时,将会分为不同的对应区域,各区域对输入模式有不同的响应特征,而这个过程是自动完成的。
SOM网络正是根据这一看法提出的,其特点与人脑的自组织特性相类似。
4.1 竞争学习算法基础[6]4.1.1 自组织神经网络结构1.定义自组织神经网络是无导师学习网络。
它通过自动寻找样本中的内在规律和本质属性,自组织、自适应地改变网络参数与结构。
2.结构层次型结构,具有竞争层。
典型结构:输入层+竞争层。
如图4-1所示。
…竞争层…图4-1 自组织神经网络结构·输入层:接受外界信息,将输入模式向竞争层传递,起“观察”作用。
竞争层:负责对输入模式进行“分析比较”,寻找规律,并归类。
4.1.2 自组织神经网络的原理1.分类与输入模式的相似性分类是在类别知识等导师信号的指导下,将待识别的输入模式分配到各自的模式类中,无导师指导的分类称为聚类,聚类的目的是将相似的模式样本划归一类,而将不相似的分离开来,实现模式样本的类内相似性和类间分离性。
由于无导师学习的训练样本中不含期望输出,因此对于某一输入模式样本应属于哪一类并没有任何先验知识。
对于一组输入模式,只能根据它们之间的相似程度来分为若干类,因此,相似性是输入模式的聚类依据。
2.相似性测量神经网络的输入模式向量的相似性测量可用向量之间的距离来衡量。
常用的方法有欧氏距离法和余弦法两种。
(1)欧式距离法设iX X ,为两向量,其间的欧式距离Ti i i X X X X X X d ))((--=-=(4-1)d越小,X 与iX 越接近,两者越相似,当0=d 时,iX X =;以T d =(常数)为判据,可对输入向量模式进行聚类分析:由于312312,,d d d 均小于T ,465645,,d d d 均小于T ,而)6,5,4(1=>i T d i, )6,5,4(2=>i T d i , )6,5,4(3=>i T d i ,故将输入模式654321,,,,,X X X X X X 分为类1和类2两大类,如图4-2所示。
(2)余弦法设iX X ,为两向量,其间的夹角余弦iTX X XX =ϕcos(4-2)ϕ越小,X 与i X 越接近,两者越相似;当ϕ=0时,ϕcos =1,iX X =;同样以0ϕϕ=为判据可进行聚类分析。
X 1X 2X 6类1类2X 3X 5X 4图4-2 基于欧式距离法的模式分类3.竞争学习原理竞争学习规则的生理学基础是神经细胞的侧抑制现象:当一个神经细胞兴奋后,会对其周围的神经细胞产生抑制作用。
最强的抑制作用是竞争获胜的“唯我独兴”,这种做法称为“胜者为王”(Winner-Take-All ,WTA )。
竞争学习规则就是从神经细胞的侧抑制现象获得的。
它的学习步骤为:(1)向量归一化对自组织网络中的当前输入模式向量X 、竞争层中各神经元对应的内星权向量jw (m j ,,2,1Λ=),全部进行归一化处理,如图4-3所示,得到X ˆ和jW ˆ:XX X=ˆ,jj j W W W=ˆ(4-3)jW 1jW ijX 1X iX W njkjy ……图4-3 向量归一化(2)寻找获胜神经元将X ˆ与竞争层所有神经元对应的内星权向量),,2,1(ˆm j WjΛ=进行相似性比较。
最相似的神经元获胜,权向量为*ˆj W: {}jn j j WX W X ˆˆmin},,2,1{*-=-∈Λ)) T j j T j T T j j j W W X W X X W X W X W X ******ˆˆˆˆ2ˆˆ)ˆ)(ˆ(ˆˆ+-=--=-⇒)ˆˆ1(2*T jX W -=)ˆˆ(max ˆˆ*T j jT jX W X W =⇒(4-4)(3)网络输出与权调整按WTA 学习法则,获胜神经元输出为“1”,其余为0。
即:⎪⎩⎪⎨⎧≠==+**01)1(j j j j t y j(4-5)只有获胜神经元才有权调整其权向量*j W 。
其权向量学习调整如下:⎪⎩⎪⎨⎧≠=+-+=∆+=+*)(ˆ)1()ˆˆ()(ˆ)(ˆ)1(*****j j t W t W W X t W W t W t W j j j j j j j α(4-6)10≤<α为学习率,α一般随着学习的进展而减小,即调整的程度越来越小,趋于聚类中心。
(4)重新归一化处理归一化后的权向量经过调整后,得到的新向量不再是单位向量,因此要对学习调整后的向量重新进行归一化,循环运算,直到学习率α衰减到0。
为了更好地说明竞争学习算法的聚类分析效果,下面以一具体实例进行计算[6]。
【例4-1】用竞争学习算法将下列各模式分为两类)6.0,8.0(1=X ,)9848.0,1736.0(2-=X , )707.0,707.0(3=X , )9397.0,342.0(4-=X ,)8.0,6.0(5=X ,学习率α=0.5。
【解】 将上述输入模式转换为极坐标形式:ο89.3611∠=X ,ο8012-∠=X ,ο4513∠=X ,ο7014-∠=X ,ο13.5315∠=X 。
如图4-4所示。
1X 2X 3X 4X 5X 1W 2W图4-4 模式向量图要求将各模式分为两类,则竞争层为两个神经元,设两个权向量,随机初始化为单元向量:ο01)0,1()0(1∠==W ,ο1801)0,1()0(2-∠=-=W ,其竞争学习过程如下:(1)1X=1d ο89.361)0(11∠=-W X ,=2dο89.2161)0(21∠=-W X21d d <,神经元1获胜,1W 调整。
ο43.18189.365.00))0(()0()1(1111∠=⨯+=-+=W X W W αο1801)0()1(22-∠==W W (2)2X=1d ο43.981)1(12∠=-W X ,=2dο1001)1(22∠=-W X21d d <,神经元1获胜,1W 调整。
ο8.301)43.1880(5.043.18))1(()1()2(1211-∠=--⨯+=-+=W X W W αο1801)1()2(22-∠==W W (3)3X=1d ο8.751)2(13∠=-W X ,=2dο2251)2(23∠=-W X 21d d <,神经元1获胜,1W 调整。
ο71)8.3045(5.08.30))2(()2()3(1311∠=+⨯+-=-+=W X W W αο1801)2()3(22-∠==W W (4)4X=1d ο771)3(14∠=-W X ,=2dο1101)3(24∠=-W X 21d d <,神经元1获胜,1W 调整。
ο5.311)770(5.07))3(()3()4(1411-∠=--⨯+=-+=W X W W αο1801)3()4(22-∠==W W (5)5X=1d ο63.841)4(15∠=-W X ,=2dο87.1261)4(25∠=-W X 21d d <,神经元1获胜,1W 调整。
ο111)5.3113.53(5.05.31))4(()4()5(1511∠≈+⨯+-=-+=W X W W αο1801)4()5(22-∠==W W (6)1X=1d ο89.251)5(11∠=-W X ,=2dο89.2161)5(21∠=-W X21d d <,神经元1获胜,1W 调整。
ο24189.255.011))5(()5()6(1111∠≈⨯+=-+=W X W W αο1801)5()6(22-∠==W W(7)2X=1d ο1041)6(12∠=-W X ,=2dο1001)6(22∠=-W X12d d <,神经元2获胜,2W 调整。
ο1301)18080(5.0180))6(()6()7(2222-∠=+-⨯+-=-+=W X W W αο241)6()7(11∠==W W (8)3X=1d ο211)7(13∠=-W X ,=2dο1751)7(23∠=-W X21d d <,神经元1获胜,1W 调整。
ο341)2445(5.024))7(()7()8(1311∠≈-⨯+=-+=W X W W αο1301)7()8(22-∠==W W (9)4X=1d ο1041)8(14∠=-W X ,=2dο601)8(24∠=-W X12d d <,神经元2获胜,2W 调整。
ο1001)13070(5.0130))8(()8()9(2422-∠=+-⨯+-=-+=W X W W αο341)8()9(11∠==W W (10)5X=1d ο13.191)9(15∠=-W X ,=2dο13.1531)9(25∠=-W X21d d <,神经元1获胜,1W 调整。
ο441)3413.53(5.034))9(()9()10(1511∠≈-⨯+=-+=W X W W αο1001)9()10(22-∠==W W一直循环运算下去,其前20次学习结果如表4-1所示。
表4-1 竞争学习结果学习次数 W 1 W 2 学习次数W 1 W 21 18.43° -180° 11 40.5° -100°2 -30.8° -180° 12 40.5° -90°3 7°-180° 1343° -90° 4 -32° -180° 1443° -81°5 11° -180° 15 47.5° -81°(续表)学习次数 W 1 W 2 学习次数W 1W 26 24° -180° 16 42°-81°7 24° -130° 1742° -80.5°8 34° -130° 18 43.5° -80.5° 9 34° -100° 19 43.5° -75° 1044° -100° 20 48.5° -75°从表4-1可见,在运算学习20次后,网络权值1W ,2W 趋于稳定:οο75,4521-→→W W 。