Классификация сейсмических сигналов на основе нейросетевых технологийРефераты >> Кибернетика >> Классификация сейсмических сигналов на основе нейросетевых технологий
dest.A[i] = src.A[i];
dest.Target = src.Target;
return dest;
}
…
/* Random distribution value
* rand() return x from [0,32767] -> x/32768
* -> x from [0,1]
*/
float RavnRaspr(float A, float B)
{float x;
x = (B-A)*rand()/(RAND_MAX+1.0) + A;
return x;
}
float NormRaspr(float A,float B)
{ float mat_ogidanie=A, Sigma=B;
float Sumx=0.0, x;
int i;
for (i=0;i<12;i++)
Sumx = Sumx + RavnRaspr(0,1); /* from R[0,1] -> N[a,sigma]*/
x = Sigma*(Sumx-6) + mat_ogidanie;
return x;
}
int Init_W ( void )
{ int i,j;
float A, B;
time_t t,t1;
t = time(NULL);
t1=t;
/* restart random generator*/
while (t==t1)
srand((unsigned) time(&t));
if (InitFunc == Random)
{ A = -Constant;
B = Constant;
Debug ("\nInit_W () --- Start (%ld))",t);
Debug ("\n InitFunc=Random[%4.2f,%4.2f]",A,B);
for(i=0; i<=NDATA; i++)
for(j=0; j<NUNIT1; j++)
W1[i][j]=RavnRaspr(A,B);
for(j=0; j <= NUNIT1; j++)
W2[j]=RavnRaspr(A,B);
}
if (InitFunc == Gauss)
{ A = Alfa;
B = Sigma;
Debug ("\nInit_W () --- Start (%ld))",t);
Debug ("\n InitFunc=Gauss[%4.2f,%4.2f]",A,B);
for(i=0; i<=NDATA; i++)
for(j=0; j<NUNIT1; j++)
W1[i][j] = NormRaspr(A,B);
for(j=0; j <= NUNIT1; j++)
W2[j] = NormRaspr(A,B);
}
if ( Widrow == Yes )
Widrow_Init();
Debug ("\nInit_W - sucsefull ");
return OK;
}
/* LearnFunc */
int LearnFunc (void)
{ int i, j, n, K, NumErr=0;
int num=0;
float err_cur=0.0, Res=0;
time_t tim;
float ep[NMAXPAT];
GL_Error=1.0;
time(&tim);
Debug ("\nLearnFunc () --- Started");
Debug ("\n eta = %4.2f",eta);
Debug ("\n LearnTolerance = %4.2f",LearnTolerance);
Init_PromW();
do
{ num++;
err_cur = 0.0;
NumErr = 0;
for (n = 0; n < NWORK; n++)
{ K = Cur_Number[n];
Res=Forward(Work[K]);
ep[n]=fabs(Res-Work[K].Target);
if (ep[n] > LearnTolerance)
{ NumErr++;
Init_PromW();
Update_Last(K, Res);
Update_Prom1(K);
Prom_to_W();
}
err_cur = err_cur + (ep[n]*ep[n]);
}
err_cur=0.5*(err_cur/NWORK);
result = Reset(err_cur, num, NumErr);
if ((num % NumOut)==0)
Debug("\nStep :%d NumErr :%d Error:%6.4f",num,NumErr,err_cur);
} while (result == CONT || result == RESTART);
Debug("\nStep :%d NumErr :%d Error:%6.4f",num,NumErr,err_cur);
return num;
}