改进的bp算法及实例应用(delphi).docVIP

  • 7
  • 0
  • 约2.8千字
  • 约 4页
  • 2017-08-17 发布于重庆
  • 举报
改进的bp算法及实例应用(delphi).doc

??? 上午上课在稿纸上画了半天,整理下思路,下午动手写的,所有模块已大概成型,本着照顾后学者,以及资源共享的原则,贴上核心的bp算法部分,已经封装好了,使用可以直接调用。三层,基本三层就可以解决我们的这些简单的问题,输入为8×8,输出4,隐层数目conts num=8;还可进一步封装,const输入层节点,输出层节点。 //---------------------cut from here------------------------------------ { 基于神经网络的手写识别系统 本单元所有函数均为作者自行研究,传播请保留此信息。 也欢迎您和作者本人交流探讨 qq?????????????????????????? 毒手药王 2007.10.9 } {bp 示意图 I_0 --Wis[0,1]--- s_1 I_1????????????? ??? ??? s_2--Wso[2,1]--O_1 I_2???????????? ?? ??? s_3???????? ?? ?? O_2 .?????????????? ??? ??? .???????????? ?? ??? ?? O_3 .????????????? ??? ??? .???????????? O_4 I_64????????? ??? ??? s_num??????? | |?????????????? ??? ??? |???????????? | |?????????????? ??? ??? |???????????? | I (输入层) ??? ??? S(隐层)??????? ?? O(输出层) } {调用方式 study(inputarray,9);//设输入为数字9的0,1字阵 } unit BP; interface uses Public_Value,windows,Math,StrUtils,SysUtils,Dialogs; procedure Study(inputArray:TIntArray;my_int_d:Integer);//学习过程,输入:矩阵,改变公共数据(权值等) function Work(inputArray:TIntArray):TdArray; implementation function fn(x:Real):Real;//激活函数 使用sigmoid var temp:Real; begin temp:=1/(1+exp(-x)); Result:=Roundto(temp, -4);//取四位小数 end; function get_d_array(my_int_d:Integer):TdArray;//十到二进制转换,如9--1001 var ch:array[1..4]of Char; s:PChar; i:Integer; temp:TdArray; begin s:=PChar(inttobin(my_int_d)); //9--1001 StrCopy(@Ch[1],s); for i:= 1 to 4 do begin d[i]:=StrToInt(ch[i]); temp[i]:=StrToInt(ch[i]); end; Result:=temp; end; procedure Study(inputArray:TIntArray;my_int_d:Integer);// TdArray var i,j,k:Integer; my_d:TdArray ; u:Real; begin //~~~~O~~~~~~~Oi,Os,O ,计算各神经元输出 my_d:=get_d_array(my_int_d);//设定,标准输出d //test {for i:= 1 to 4 do ShowMessage(IntToStr(d[i])); } //test end {Oi} k:=1; for i:=1 to 8 do for j:=1 to 8 do ?? begin ?? Oi[k]:=inputarray.bmp_num[i,j]; ?? k:=k+1; ?? end; {Os} u:=0; for i:=1 to num do begin for j:=0 to 64 do u:=u+Oi[j]*wis[j,i]; Os[i]:=RoundTo(fn(u),-4); end; {O} u:=0; for i:=1 to 4 do begin for j:=1 to num do u:=u+os[j]*wso[j,i]; o[i]:=RoundTo(fn(u),-4); end; //~~~~~d~~~~~~~ //for i:=1 to 4 do //d

文档评论(0)

1亿VIP精品文档

相关文档