Классификация сейсмических сигналов на основе нейросетевых технологий
Рефераты >> Кибернетика >> Классификация сейсмических сигналов на основе нейросетевых технологий

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;

}


Страница: