📄 neural.c~
字号:
//neural.c#include"neural.h"int ArtDetect(int *pp){ int a_s2[S2],w_p[S2]; int x; for(i2=0;i2<S2;i2++) { a_s2[i2]=AS2; w_p[i2]=0; } for(i2=0;i2<S2;i2++) { x=0; for(i1=0;i1<S1;i1++) { x+=SameOr(w21[i1][i2],pp[i1]); } w_p[i2]=HardLim(x-a_s2[i2]); } for(i2=0;i2<S2;i2++) { if(w_p[i2]) return 1; } return 1; }int ArtStudy(int *pp){ int a1[S1]; float a2[S2]; int a0,w0[S2];//w0[]: the w0[i] neural has been stop;a0:value of reset int wj[S1];//the number j neural of the second layer is revived float sum_a1,sum_p; int on_art;//if all over int whe_new;//whether is new input vector int j,fir_a2,sec_a2,thi_a2;//behave the number of max a2 int whe_equ;//whether w21 changed if(input_sum>=M_IN) { over_for=21; pcap_close(hand); return 1; } if(equ_sum>=M_EQU) { over_for=22; pcap_close(hand); return 1; } for(i1=0;i1<S1;i1++) { a1[i1]=pp[i1];#ifdef DEBUG3 printf("%d",a1[i1]); if((i1+1)%32==0) printf("\n");#endif } for(i2=0;i2<S2;i2++) { w0[i2]=0;//revive all the neurals } //step:1 over for(i2=0;i2<S2;i2++) a2[i2]=0; for(i2=0;i2<S2;i2++) { for(i1=0;i1<S1;i1++) { a2[i2]+=w12[i2][i1]*a1[i1];#ifdef DEBUG printf("%f\n",a2[i2]);#endif }#ifdef DEBUG printf("%f\n",a2[i2]);#endif } if(a2[0]>=a2[1]) { fir_a2=0; if(a2[0]>=a2[2]) { if(a2[1]>=a2[2]) { sec_a2=1; thi_a2=2; } else { sec_a2=2; thi_a2=1; } } else { fir_a2=2; sec_a2=0; thi_a2=1; } } else { fir_a2=1; if(a2[0]>=a2[2]) { sec_a2=0; thi_a2=2; } else { thi_a2=0; if(a2[1]>=a2[2]) { sec_a2=2; } else { fir_a2=2; sec_a2=1; } } } /*old algorithm a2[fir_a2]=1; a2[sec_a2]=0; a2[thi_a2]=0; */ j=fir_a2; //step:2-1 over whe_new=1; on_art=1; while(on_art) { if(!whe_new) { // a2[fir_a2]=0; if(!w0[sec_a2]) { // a2[sec_a2]=1; // a2[thi_a2]=0; j=sec_a2; } else { if(!w0[thi_a2]) { // a2[sec_a2]=0; // a2[thi_a2]=1; j=thi_a2; } else { break; } } } //step:2-2 over /*old algorithm for(i1=0;i1<S1;i1++) { for(i2=0;i2<S2;i2++) { wj[i1]=w21[i1][i2]*a2[i2]; } } */ for(i1=0;i1<S1;i1++) { wj[i1]=w21[i1][j]; } //step:3 over for(i1=0;i1<S1;i1++) a1[i1]=pp[i1] && wj[i1]; //step:4 over sum_a1=0; sum_p=0; for(i1=0;i1<S1;i1++) { sum_a1+=a1[i1]; sum_p+=pp[i1]; } if((sum_a1/sum_p)<=RO) a0=1; else a0=0;#ifdef DEBUG1 printf("a0=%d\n",a0);#endif if(a0==1) { w0[j]=1; whe_new=0; } else { whe_equ=0; for(i1=0;i1<S1;i1++) { w12[j][i1]=(float) ZETA*a1[i1]/(ZETA+sum_a1-1); if(w21[i1][j]!=a1[i1]) whe_equ=1; w21[i1][j]=a1[i1]; } on_art=0; input_sum++; if(!whe_equ) equ_sum++;#ifdef DEBUG3 printf("equsum=%d,inputsum=%d\n",equ_sum,input_sum);#endif } } //art over#ifdef DEBUG1 for(i1=0;i1<S1;i1++) { for(i2=0;i2<S2;i2++) { printf("%d,",w21[i1][i2]); } printf("\n"); } printf("w12\n"); for(i2=0;i2<S2;i2++) { for(i1=0;i1<S1;i1++) { printf("%.3f,",w12[i2][i1]); } printf("\n"); } printf("input_sum=%d\n",input_sum);#endif return 0;}/*function same_or()*/int SameOr(int x,int y){ int z; z=!( (x&&(!y)) || ((!x)&&y) ); return z;}/*function hardlim()*/int HardLim(int x){ if(x>0) return 1; else return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -