6.    Файл автоматической компиляции программы под Unix -“Makefile”.

CC= cc

LIBS= -lm

OBJ= nvclass.o

nvclass: $(OBJ)

$(CC) -o nvclass $(LIBS) $(OBJ)

nvclass.o: nvclass.c

7.     Основной модуль - “nvclass.с”

/*

 * Neuron Classificator ver 1.0

 */

#include "common.h"

/* =========================

 * MAIN MODULE

 * =========================

 */

void main (int argc, char *argv[])

{ int i;

char buf[MAXLINE], PrName[20], *ptr;

time_t tim;

time(&tim);

/* UNIX Module */

Dfp = OpenFile(DebugFile);

strcpy(buf,argv[0]);

ptr = strrchr(buf,'/');

ptr++;

strcpy(PrName,ptr);

Debug ("\n\n'%s' - Started %s",PrName,ctime(&tim));

getvalues();

Rfp = OpenFile(ReportFile);

DefineNetStructure(NetStr); /* NetStr string from input file */

getStructure(buf);

Debug ("\nNeyral net %s",buf);

Input = LocPatMemory(NPATTERN);

Work = LocPatMemory(NPATTERN);

Array_MinMax = LocateMemAMM();

Cur_Number = DefineCN (NPATTERN);

printf("\nMetka - 1");

if (Type == TYPE_ONE)

OnlyTestVector ();

if (Type == TYPE_TWO)

TestAfterLearn ();

if (Type == TYPE_THREE)

CheckOneVector ();

if (Type == TYPE_FOUR)

CrossValidation();

 time(&tim);

 Debug ("\n\n%s - Normal Stoped %s",PrName,ctime(&tim));

 CloseFile(Dfp);

 CloseFile(Rfp);

 FreeAMM (Array_MinMax);

 DestroyCN (Cur_Number);

 FreePatMemory(Input,NPATTERN);

 FreePatMemory(Work, NPATTERN);

}

/*

 * ^OnlyTestVectors - read net from (NetworkFile) and test the TestVector(s)

 */

void OnlyTestVector(void)

{ char buf[MAXLINE+1];

STAT **st, *stat;

int i,j;

float Res;

Debug ("\nOnlyTestVector proc start");

Debug ("\n NPATTERN = %d",NPATTERN);

Debug ("\n NTEST = %d",NTEST);

Test = LocPatMemory(NTEST);

ReadPattern(Test,TestVector, NTEST);

/* ShowPattern ("1.tst",Test,NTEST);*/

PrintStatHeader();

st = DefineAllStat (Test,NTEST);

ReadHeaderNet(NetworkFile,Array_MinMax);

if (Scaling == Yes)

{ for (i=0;i<NTEST;i++)

ConvX_AB_01(Test[i]);

}

for (i=0; i < Loop ; i++)

{ Debug("\n----/ STEP = %d /-----",i+1);

Report("\n < Loop %d > ",i+1);

ReadNet(NetworkFile,i+1);

for (j=0;j<NTEST;j++)

{ Res=Forward(Test[j]);

CheckVector(Res,Test[j]);

FillSimpleStatForm(st[j],Res);

}

PrintTestStat(st,NTEST);

}

DestroyAllStat (st,1);

FreePatMemory(Test,NTEST);

}

/* ---------------------------------

 * Debug to LOG_FILE and to CONSOLE

 */

/* debug for UNIX */

void Debug (char *fmt, ...)

 { va_list argptr;

int cnt=0;

 if ((Dfp != NULL) && (DEBUG == Yes))

{

va_start(argptr, fmt);

vfprintf(Dfp, fmt, argptr);

fflush (Dfp);

va_end(argptr);

}

}

void Report (char *fmt, ...)

 { va_list argptr;

int cnt=0;

 if (Rfp != NULL)

{

va_start(argptr, fmt);

vprintf (fmt,argptr);

vfprintf(Rfp, fmt, argptr);

fflush (Rfp);

va_end(argptr);

}

}

/* debug for DOS */

/*

void Debug (char *fmt, ...)

{ FILE *file;

va_list argptr;

if (DEBUG == Yes)

{ if ((file = fopen(DebugFile,"a+"))==NULL)

{ fprintf(stderr, "\nCannot open DEBUG file.\n");

exit(1);

}

va_start(argptr, fmt);

vfprintf(file, fmt, argptr);

va_end(argptr);

fclose (file);

}

}

void Report (char *fmt, ...)

{ FILE *file;

va_list argptr;

if ((file = fopen(ReportFile,"a+"))==NULL)

{ fprintf(stderr, "Cannot open REPORT file.\n");

exit(1);

}

va_start(argptr, fmt);

vfprintf(file, fmt, argptr);

vprintf(fmt,argptr);

va_end(argptr);

fclose (file);

}

*/

/*

 * ^ReadPattern

 */

void ReadPattern (PAT *input, char *name, int Len)

{ int i=0, j=0, id, TmpNp=0, TmpNd=0, Flag=0;

char *buf1="NumOfPattern:";

char *buf2="PatternDimens:";

char str[40],str1[10];

PAT Ptr;

FILE *DataFile;

float tmp;

Debug ("\nReadPattern(%s,%d) - started",name,Len);

Ptr.A =(float*) malloc (NDATA * sizeof(float));

if ((DataFile = fopen(name,"r")) == NULL )

{ Debug("\nCan't read the data file (%s)",name);

fclose(DataFile);

exit (1);

}

if ((strcmp(name,TestVector)) == 0) /* if read TestVector, then read */

Flag = 1; /* only ID and A[i]. (NO Target) */

fscanf(DataFile,"%s %s",str,str1);

if ((strcmp(str,buf1))==0)

TmpNp = atoi (str1);

Debug("\nNumOfPattern = %d",TmpNp);

fscanf(DataFile,"%s %s",str,str1);

if ((strcmp(str,buf2))==0)

TmpNd = atoi (str1);

Debug("\nPatternDimens = %d",TmpNd);

if (TmpNp != Len)

Debug ("\n\tWARNING! - NumOfPattern NOT EQUAL Param (%d != %d)",TmpNp,Len);

if (TmpNd != NDATA)

Debug ("\n\tWARNING! - PatternDimens NOT EQUAL NDATA (%d != %d)",TmpNd,NDATA);

for (i = 0; i < Len; i++)

{fscanf(DataFile,"%d",&id);

Ptr.ID = id;

for (j=0; j < NDATA; j++)

{ fscanf (DataFile,"%f",&tmp);

Ptr.A[j]=tmp;

}

if ( Flag )

tmp = -1;

else

fscanf(DataFile,"%f",&tmp);

Ptr.Target = tmp;

input[i]=patcpy(input[i],Ptr);

}

fclose(DataFile);

}

/*

 * ^LocPatMemory - locate memory for (PAT *)

 */

PAT* LocPatMemory(int num)

{ int i;

PAT *src;

src = (PAT *) malloc (num * sizeof(PAT));

for (i=0; i< num; i++)

{src[i].ID = -1;

src[i].A = (float*) malloc (NDATA * sizeof(float));

src[i].Target = -1.0;

}

return (src);

}

void FreePatMemory( PAT* src, int num )

{ int i;

for (i=0;i<num;i++)

free (src[i].A);

free (src);

}

/*

 * Copies pattern src to dest.

 * Return dest.

 */

PAT patcpy (PAT dest, PAT src)

{ int i;

dest.ID = src.ID;

for (i=0;i<NDATA;i++)

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;

}


Информация о работе «Классификация сейсмических сигналов на основе нейросетевых технологий»
Раздел: Кибернетика
Количество знаков с пробелами: 114641
Количество таблиц: 1
Количество изображений: 28

Похожие работы

Скачать
110516
5
18

... МП к некритическому экстраполированию результата считается его слабостью. Сети РБФ более чувствительны к «проклятию размерности» и испытывают значительные трудности, когда число входов велико. 5. МОДЕЛИРОВАНИЕ НЕЙРОННЫХ СЕТЕЙ ДЛЯ ПРОГНОЗИРОВАНИЯ СТОИМОСТИ НЕДВИЖИМОСТИ   5.1 Особенности нейросетевого прогнозирования в задаче оценки стоимости недвижимости Использование нейронных сетей можно ...

Скачать
15022
0
0

... в связи с необходимостью упорядоченного сообщения с высоким приоритетом при радикальном изменении окружающих условий и двунаправленностью каналов. Возможности вычисления путей маршрутизации можно применять при построении интегральных схем и проектирования кристаллов процессоров. Нейрокомпьютеры с успехом применяются при обработке сейсмических сигналов в военных целях для определения коорди

Скачать
84679
0
11

... (ШД), адресов (ША) и управления (ШУ). Однокристальные микропроцессоры получаются при реализации всех аппаратных средств процессора в виде одной БИС или СБИС (сверхбольшой интегральной схемы). По мере увеличения степени интеграции элементов в кристалле и числа выводов корпуса параметры однокристальных микропроцессоров улучшаются. Однако возможности однокристальных микропроцессоров ограничены ...

Скачать
20016
0
6

... данных а разбивать входные данные на кластеры. •Рекурсивные сети Элмана, способные обрабатывать последовательности векторов. •Вероятностные сети, аппроксимирующие Байесовские классификаторы с любой степенью точности.   Общие принципы, характерные для нейросетей Согласно общепринятым представлениям наиболее общими принципами, характерными для современных нейросетей являются: коннекционизм, ...

0 комментариев


Наверх