⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bp.c

📁 人工神经网络教程
💻 C
📖 第 1 页 / 共 2 页
字号:
   	DEL_OT[m]=wkb*ru0*wk*(1.0-wk);
   }
   /*delta calculate */
   for (k=0;k<HN;k++)
   {
   	inival=0.0;
   	for(m=0;m<ON;m++)
   	inival+=(DEL_OT[m]*W_HD_OT[m][k]);
   	wk=OT_HD[k];
   	DEL_HD[k]=inival*ru0*wk*(1.0-wk);
   }
   /*updatint for weights from H layer */
   for (k=0;k<ON;k++)
   {
   	for(m=0;m<HN;m++)
   	 DW_HD_OT[k][m]+=(alpha*DEL_OT[k]*DEL_HD[m]);
   	DCW_OT[k]+=(beta*DEL_OT[k]);
   }
   /* updating for weights from I layer*/
   for(k=0;k<HN;k++)
   {
   	for (m=0;m<IN;m++)
   	 DW_IN_HD[k][m]+=(alpha*DEL_HD[k]*DEL_OT[m]);
     DCW_HD[k]+=(beta*DEL_HD[k]);
    }
   } 
  if(text==0)
  {
  	k=80.0*error;
  	if(k>160)
  	  line2(loop+64,359,loop+64,200,LIGHTBLUE);
  	else if (k>0)
  	  line2(loop+64,359,loop+64,360-k,LIGHTBLUE);
  }
  if((non==0)||(error<erlimit))
    break;
  for(k=0;k<HN;k++)
  {
  	wk=moment*OCW_HD[k]+DCW_HD[k];
  	CW_HD[k]+=wk;
  	OCW_HD[k]=wk;
  	for(m=0;m<IN;m++)
  	{wk=moment*OW_IN_HD[k][m]+DW_IN_HD[k][m];
  	W_IN_HD[k][m]+=wk;
  	OW_IN_HD[k][m]=wk;
  }
  }
  for(k=0;i<ON;i++)
  {
  	wk=moment*OCW_OT[k]+DCW_OT[k];
  	CW_OT[k]+=wk;
  	OCW_OT[k]=wk;
  	for(m=0;m<HN;m++)
  	{
  		wk=moment*OW_HD_OT[k][m]+DW_HD_OT[k][m];
  		W_HD_OT[k][m]+=wk;
  		OW_HD_OT[k][m]=wk;
  	}
  }
if(loop % epoch ==0)
  {
  	if(text)
  	{
  		locate(0,24);
  		printf("\xlb[31msum.of error =\xlb]0m");
  		printf("\xlb[1m%5.3\xlb[0m",error);
  	}
	else 
	{
	  locate(0,11);
      printf("\xlb[35mSUM.of error =\xlb]0m");
  	  printf("\xlb[1m%5.3\xlb[0m",error);
	}
      	
  	/***********************************************************************/
  	while(!kbhit())
  	{
  		int ctt;
  		
  		locate(25,24);
  		printf("Push any key to continue");
  		for(ctt=-30000;ctt<3000;ctt++);
  		locate(25,24);
  		printf("        ");
  		for(ctt=-10000;ctt<10000;ctt++);
  	}
  }
  moment+=dmoment;
  if(moment>0.9)
    moment=0.9;
 }
 /***************loop end **************/
 if(text==0)
 {
 	for(loopl=0,xps=0;loopl<4;loopl++,xps+=100)
 	{
 		drawrect(xps+94,80,BOX,BOX,BLUE);
 		drawrect(xps+80,112,BOX,BOX,BLUE);
 		drawrect(xps+112,112,BOX,BOX,BLUE);
 		drawrect(xps+80,114,BOX,BOX,BLUE);
 		drawrect(xps+112,114,BOX,BOX,BLUE);
 	}
 	
 }
 for(loopl=0,xps=80;loop<4;loop++,xps+=100)
 {
 	for(k=0,yp=144,xp=0;k<IN;k++,xp+=32)
 	{
 		if (sig)
 		OT_IN[k]=indata[loopl].input[k]?SIG1_1:SIG1_0;
 		else
 		OT_IN[k]=indata[loopl].input[k]?SIG0_1:SIG0_0;
 		if(text)
 		{
 			locate(73,3*loopl+k+6);
 			ocolor(OT_IN[k]);
 		}
 		else
 		{
 			ival=val_rect(OT_IN[k],SZ_BOX);
 			drawrect(xp+xps,yp,ival,ival,WHITE);
 		}
 		
 	}
 	  
 	for(k=0,xp=0,yp=112;k<HN;k++,xp+=32)
 	{
 		inival=0.0;
 		for(m=0;m<IN;m++)
 		  inival+=(W_IN_HD[k][m]*OT_IN[m]);
 		  inival+=CW_HD[k];
 		  OT_HD[k]=sigmf(sig,inival);
 		  if(text)
 		  {
 		  	locate(37,3*loop+k+6);
 		  	ocolor(OT_HD[k]);
 		  	locate(45,3*loop+k+6);
 		  	scolor(inival);
 		  	if(loopl==0);
 		  	{
 		  		locate(53,3*loopl+k+6);
 		  		wcolor(W_IN_HD[k][0]);
 		  		wcolor(W_IN_HD[k][1]);
 		  		fcolor(CW_HD[k]);
 		  	}
 		  }
 		  else
 		  {
 		  	ival=val_rect(OT_HD[k],SZ_BOX);
 		  	drawrect(xp+xps,yp,ival,WHITE);
 		  }
 	}
 	for(k=0,xp=14,yp=80;k<ON;k++,xp+=32)
 	{
 		inival=0.0;
 		for(m=0;m<IN;m++)
 		  inival+=(W_HD_OT[k][m]*OT_HD[m]);
 		  inival+=CW_OT[k];
 		  OT_OT[k]=sigmf(sig,inival);
 		  if(text)
 		  {
 		  	locate(1,3*loop+k+6);
 		  	ocolor(OT_OT[k]);
 		  	locate(9,3*loop+k+6);
 		  	scolor(inival);
 		  	if(loopl==0);
 		  	{
 		  		locate(17,3*loopl+k+6);
 		  		wcolor(W_HD_OT[k][0]);
 		  		wcolor(W_HD_OT[k][1]);
 		  		fcolor(CW_OT);
 		  	}
 		  }
  			
    else
    {
  	        ival=val_rect(OT_OT[k],SZ_BOX);
 			drawrect(xp+xps,yp,ival,ival,WHITE);
    }
 	}
 	if(text)
 	{
 		locate(0,24);
 		printf("\xlb[35mSUM.of ERROR=\xlb[0m\xlb[35m\xlb[1m%5.3lf\xlb[0m",error);
 	}

 		else
 	{
 		locate(0,11);
 		printf("\xlb[35mSUM.of ERROR=\xlb[0m\xlb[35m\xlb[1m%5.3lf\xlb[0m",error);
 	}
 if(non)
 savewgt(W_IN_HD,LW_IN_HD,CW_HD,LCW_HD,
         W_HD_OT,LW_HD_OT,CW_OT,LCW_OT);
 closegraph();
 textmode(LASTMODE);
 printf("\n PROGRAM END\n");
 return(0);
  }
} 

/*       END OF MAIN */
 wgtinit(w,sl,inival,flag)
 double inival,w[];
 int sl,flag;
 {
 	int i;
 	double drand48();
 	i=0;
 	while(i<sl)
 	{
 		*(w+i)=(flag)?inival*drand48():inival*(drand48()-0.5)*2.0;
 		i++;
 	}
 	return(0);
 }
 double drand48()
 {
 	double d;
 	d=(double)rand()/32767.0;
 	return(d);
 }
 /* --------------------------*/
 loadwgt(file,w1,s1,w2,s2,w3,s3,w4,s4)
 char*file;
 double w1[],w2[],w3[],w4[];
 int s1,s2,s3,s4;
 {
 	int fd,ct;
 	double buffer;
 	while((fd=open(file,O_RDONLY|O_BINARY))==-1)
 	{
 		fprintf(stderr,"file %s is not found!new file name?\n",file);
 		scanf("%s",file);
 	}
 	ct=0;
 	while(ct<s1)
 	{
 		if(read(fd,(char*)&buffer,8)==8)
 		*(w1+ct)=buffer;
 		else
 		{
 			fprintf(stderr,"file %s read error!\n",file);
 			break;
 		}
 		ct++;
 	}
 	ct=0;
 	while(ct<s2)
 	{
 		if(read(fd,(char *) &buffer,8)==8)
 		*(w2+ct)=buffer;
 		else
 		{   fprintf(stderr,"file %s read error!\n",file);
 			break;
 		}
 		ct++;
 	}
 	ct=0;
 	while(ct<s3)
 	{
 		if(read(fd,(char *) &buffer,8)==8)
 		*(w3+ct)=buffer;
 		else
 		{   fprintf(stderr,"file %s read error!\n",file);
 			break;
 		}
 		ct++;
 	}
 	ct=0;
 	while(ct<s4)
 	{
 		if(read(fd,(char *) &buffer,8)==8)
 		*(w4+ct)=buffer;
 		else
 		{   fprintf(stderr,"file %s read error!\n",file);
 			break;
 		}
 		ct++;
 	}
    		  	
 close(fd);
 return(0);
 }
 /*-----------------------------------------*/
 savewgt(w1,s1,w2,s2,w3,s3,w4,s4)
 double w1[],w2[],w3[],w4[];
 int s1,s2,s3,s4;
 {
 	int fd,ct;
 	char ctt,file[30];
 	locate(28,24);
 	printf("\xlb[31mSaving?(Y=yes\xlb[0m");
 	ctt=getchar();
 	locate(28,24);
 	printf("      ");
 	if((ctt!='y')&&(ctt!='Y'))
 	return(0);
 	locate(24,28);
 	printf("\xlb[31mFile Name ?(Y=yes\xlb[0m");
 	scanf("%s",file);
 	if((fd=open(file,O_RDWR|O_BINARY|O_CREAT))==-1)
 	{
 		fprintf(stderr,"file creation error!back to main propagation\n");
 		return(0);
    }
 	lseek(fd,0,0);
 	ct=0;
 	while(ct<s1)
 	{
 		if(write(fd,(void*)(w1+ct),8)!=8)
 		{
 			fprintf(stderr,"file %s write error!\n",file);
 			break;
 		}
 		ct++;
 	}
 	ct=0;
 	while(ct<s2)
 	{
 		if(write(fd,(void*)(w2+ct),8)!=8)
 		{
 			fprintf(stderr,"file %s write error!\n",file);
 			break;
 		}
 		ct++;
 	}
 	ct=0;
 	while(ct<s3)
 	{
 		if(write(fd,(void*)(w3+ct),8)!=8)
 		{
 			fprintf(stderr,"file %s write error!\n",file);
 			break;
 		}
 		ct++;
 	}
 	ct=0;
 	while(ct<s4)
 	{
 		if(write(fd,(void*)(w4+ct),8)!=8)
 		{
 			fprintf(stderr,"file %s write error!\n",file);
 			break;
 		}
 		ct++;
 	}
 	ct=0;
 	
    close(fd);
    return(0);
 }
 int drawrect(x,y,p)
 int x,y,p;
 {
 	int tt;
 	setcolor(BLUE);
 	for(tt=1;tt<20;tt++)
 	rectangle(x+100,y,x+100+tt,y+tt);
 	tt=getcolor();
 	setcolor(p);
 	 rectangle(x+100,y,x+100+tt,y+tt);
 	 setcolor(tt);
 	 return(0);
 }
 int val_rect(v,s)
 double v,s;
 {
 	int iv;
 	if(v<=0)
 	 iv=v*s+0.5;
 	 else
 	 iv=v*s-0.5;
 	return(iv);
 }
 int cls()
 {
 	clrscr();
 }
 g_init()
 {
 	int gradriver=EGA,mode=EGAHI;
 	initgraph(&gradriver,&mode,"tc");
 	window(1,1,80,25);
 }
 int line2(x,y,xp,yp,p)
 int x,y,xp,yp,p;
  {
  	int tt;
  	tt=getcolor();
  	setcolor(p);
  	line(x,y,xp,yp);
  	setcolor(tt);
  }
  /****************************************END ***************************/
	
    	
    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -