📄 bp.c
字号:
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 + -