您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > AI人工智能 > 人工神经网络及简单应用
1人工神经网络及简单应用一、神经网络简介对人工神经网络(ANN)最早到研究可以追溯到20世纪40年代。人工神经网络是从微观结构与功能上对人脑神经系统的模拟而建立起来的一类结构,具有模拟人的部分形象思维的能力。其特点主要是具有非线性、学习能力和自适应性。1943年,美国心理学家McCulloch和数学家Pitts共同提出“模拟生物神经元”的被称为MP的人工神经元模型。它是一个多输入/多输出的非线性信息处理单元。连接机制结构的基本处理单元与神经生理学类比往往称为神经元,如图。该神经元单元由多个输入,1,2,,niXi和一个输出y组成。中间状态由输入信号和权和表示,输入为01nnjjiijiijiipwxwx(0,01jjxw),故输出为(p)ijyf,其中j为偏置(阈值),jiw为连接权值,(.)f为激活函数。人工神经网络的结构基本分为两类,递归(反馈)网络和前馈网络。在递归网络中神经元的输出被反馈到同层或前层的神经元,而在前馈网络中,不存在同层神经元间的连接,从输入层到输出层的信号通过单向连接流动,从一层连接到下一层。神经网络通过有师学习、无师学习和强化学习三种方式进行学习,其中,强化学习可以看作是有师学习的特例。二、人工神经网络的简单应用用神经网络的方法实现对0,1,2,3,…..,9这十个数字的奇偶性判断。这是一个简单的问题,应用传统的方法很容易就实现它。If(n%2==0){Inputnisevennumber.}xxnj1jnj?)f()jy...ww1f()-1.2Elseinputnisoddnumber.如果我们采用ANN算法来解决该问题,则要则要提供一组正确的数据对这个算法进行训练,告诉算法什么是对的,什么是错的,训练结束后,看输出结果是否正确,不正确则继续进行训练,直到程序可以正确的处理问题。三、实验结果及分析经过试验可知,该程序可以很好地处理问题,但阈值的选取还需进一步研究。附:实现程序#includestdlib.h#includestdio.h#includetime.hintM[10];//权值intX[10]={1,2,3,4,5,6,7,8,9,10};//输入向量intY[10]={1,0,1,0,1,0,1,0,1,0};//理想输出向量,0表示奇数,1表示偶数intO[10];//保存输出向量3intST=52;//阈值voidinitM()//初始化权值{intx=0;srand((unsignedint)time(0));for(x=0;x10;++x){M[x]=rand()%100;}}intactive(intm,intx)//跃迁型激活函数{into=m*x;if(oST){return1;}else{return0;}}voidcalcY()//计算输出向量{intx=0;for(x=0;x10;++x){O[x]=active(M[x],X[x]);}}intadjustM(){//根据实际输出向量和理想输出向量调整权向量,返回实际输出和理想输出不匹配的数目interr=0;intx=0;for(x=0;x10;++x){if(O[x]!=Y[x]){err++;if(0==O[x]){M[x]+=X[x];}else{M[x]-=X[x];4}}}returnerr;}voidprintM(){intx=0;for(x=0;x10;++x){printf(M[%d]=%d\n,x,M[x]);//输出权值}}voidtest(intinput){printf([%d][%d],M[input],X[input]);if(active(M[input],X[input])){printf(%d是偶数\n,input);}else{printf(%d是奇数\n,input);}}intmain(){intn=0;initM();while(1){//一直训练直到能够100%正确为止n++;calcY();interr=adjustM();if(err=0){//结束训练break;}printf(错误数%d\n,err);}printM();printf(阈值%d训练次数%d\n,ST,n);5while(1){inta=0;printf(Pleaseinputanumberfrom0to9!!\n);scanf(%i,&a);if(0a||9a)printf(Thenumberyouinputnotright!\n);elsetest(a);}return0;}
本文标题:人工神经网络及简单应用
链接地址:https://www.777doc.com/doc-2704249 .html