Читаем Учебное пособие по курсу «Нейроинформатика» полностью

Instructor kParTan Used Library1; {Антиовражная процедура обучения kParTan}

Main {Обучение ведется по всему обучающему множеству}

 Label Exit, Exit1;

 Static

  Color InstColor Name "Цвет примеров обучающего множества"

  Default HFFFF; {По умолчанию}

  Integer OperColor Name "Операция для отбора цветов" Default CIn;

  {все примеры, в цвете которых есть хоть один единичный бит }

  String NetName Name "Имя сети" Default "";

  Integer What Name "Что обучать" Default Parameters;

  {По умолчанию 2ParTan}

  Integer k Name "Число шагов между ParTan шагами" Default 2;  

  Real AccuracyName "Требуемый минимум оценки"Default 0.00001;

  Logic Direction Name "Случайное направление или антиградиент"

  11 Default True; {Если истина,то антиградиент }

 Var

  Integer Handle; {Номер сеанса задачника}

  String QName; {Имя запроса}

  PRealArray Map1, DirectMap; {Для текущего массива параметров и ParTan направления}

  Real Step, ParTanStep; {Длины шагов для оптимизации шага}

  Real Est1, Est2; {Для хранения текущей и случайной оценки}

  Long I;

Init

 Begin

  If Not SetInstructionObject(What, @NetName) Then GoTo Exit; {Задаем объекты обучения}

  QName = "InitSession"; {Задаем имя запроса}

  Map1 = NewArray(mRealArray, 3);{Создаем массив для аргументов запроса}

  If Map = Null Then GoTo Exit;

  TPointer(Map^[1]) = @InstColor; {Заносим адрес первого аргумента}

  TPointer(Map^[2]) = @OperColor; {Заносим адрес второго аргумента}

  TPointer(Map^[3]) = @Handle; {Заносим адрес третьего аргумента}

  If Not GenerateQuMap(@QName, Map) Then GoTo Exit;{Открываем сеанс работы с задачником}

  If Not FreeArray(mRealArray, Map) Then GoTo Exit;{Освобождаем массив для аргументов}

  {Собственно начало обучения}

  Map = CreateArray; {Создаем вспомогательные массивы}

  DirectMap= CreateArray;

  If Map = Null Then GoTo Exit;

  If DirectMap = Null Then GoTo Exit;

  Est1 = Accuracy*10; {Задаем оценку, не удовлетворяющую требованию точности}

  Step = 0.005; {Задаем начальное значение шагу}

 End

InstrStep Est > Accuracy

 Begin

  If Not SaveArray(Map1) Then GoTo Exit; {Сохраняем начальный массив параметров}

  For I = 1 To k Do Begin {Выполняем k межпартанных шагов}

   If Direct Then Est = SDM(Handle, Step) Else Est = RDM(Handle, Step);

   If Error <> 0 Then GoTo Exit;

  End;

  If Not SaveArray(DirectMap) Then GoTo Exit; {Сохраняем конечный массив параметров}

  For I = 1 To TLong(Map^[0]) Do

   DirectMap^[I] = DirectMap^[I] - Map^[I]; {Вычисляем направление ParTan шага}

  ParTanStep = 1; {Задаем начальное значение ParTan шагу}

  Est =Optimize(DirectMap, ParTanStep); {Вызываем функцию подбора оптимального шага}

  If Error <> 0 Then GoTo Exit;

 End

Close

 Begin

Exit:

  If Not EraseArray(Мар) Then; {Освобождаем вспомогательные массивы}

Перейти на страницу:

Похожие книги