Е. Миркес - Учебное пособие по курсу «Нейроинформатика»
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; {Освобождаем вспомогательные массивы}
If Not EraseArray(DirectMap) Then;
QName = "CloseSession"; {Задаем имя запроса}
Map = NewArray(mRealArray, 1); {Создаем массив для аргументов запроса}
If Map = Null Then GoTo Exit1;
TPointer(Map^[1]) = @Handle; {Заносим адрес единственного аргумента}
If Not GenerateQuest(@QName, Map) Then;{Открываем сеанс работы с задачником}
If Not FreeArray(mRealArray, Map) Then; {Освобождаем массив для аргументов}
Exit1:
End
End Instructor
Стандарт второго уровня компонента учитель
Компонент учитель одновременно работает только с одним учителем. Запросы к компоненту учитель можно разбить на следующие группы.
1. Обучение сети.
2. Чтение/запись учителя.
3. Инициация редактора учителя.
4. Работа с параметрами учителя.
Обучение сети
К данной группе относятся три запроса — обучить сеть (InstructNet), провести N шагов обучения (NInstructSteps) и прервать обучение (CloseInstruction).
Обучить сеть (InstructNet)Описание запроса:
Pascal:
Function InstructNet: Logic;
C:
Logic InstructNet()
Аргументов нет.
Назначение — производит обучение сети.
Описание исполнения.
1. Если Error <> 0, то выполнение запроса прекращается.
2. Если в момент получения запроса учитель не загружен, то возникает ошибка 601 — неверное имя компонента, управление передается обработчику ошибок, а обработка запроса прекращается.
3. Выполняется главная процедура загруженного учителя.
4. Если во время выполнения запроса возникает ошибка, а значение переменной Error равно нулю, то генерируется внутренняя ошибка 605 — ошибка исполнения учителя, управление передается обработчику ошибок, а обработка запроса прекращается.
5. Если во время выполнения запроса возникает ошибка, а значение переменной Error не равно нулю, то обработка запроса прекращается.
Провести N шагов обучения (NInstructSteps)Описание запроса:
Pascal:
Function NInstructNet(N: Integer): Logic;
C:
Logic NInstructNet(Integer N)
Описание аргумента:
N — число выполнений блока одного шага обучения сети.
Назначение — производит обучение сети.
Описание исполнения.
1. Если Error <> 0, то выполнение запроса прекращается.
2. Если в момент получения запроса учитель не загружен, то возникает ошибка 601 — неверное имя компонента, управление передается обработчику ошибок, а обработка запроса прекращается.
3. Выполняется блок инициации главной процедуры загруженного учителя, N раз выполняется блок одного шага обучения, выполняется блок завершения обучения.
4. Если во время выполнения запроса возникает ошибка, а значение переменной Error равно нулю, то генерируется внутренняя ошибка 605 — ошибка исполнения учителя, управление передается обработчику ошибок, а обработка запроса прекращается.
5. Если во время выполнения запроса возникает ошибка, а значение переменной Error не равно нулю, то обработка запроса прекращается.
Прервать обучение (CloseInstruction)Описание запроса:
Pascal:
Function CloseInstruction: Logic;
C:
Logic CloseInstruction()
Аргументов нет.
Назначение — прерывает обучение сети.
Описание исполнения.
1. Если Error <> 0, то выполнение запроса прекращается.
2. Если в момент получения запроса учитель не загружен, то возникает ошибка 601 — неверное имя компонента, управление передается обработчику ошибок, а обработка запроса прекращается.
3. Если в момент получения запроса не выполняется ни один из запросов обучить сеть (InstructNet) или провести N шагов обучения (NInstructSteps), то возникает ошибка 606 — неверное использование запроса на прерывание обучения, управление передается обработчику ошибок, а обработка запроса прекращается.
4. Завершается выполнение текущего шага обучения сети.
5. Выполняется блок завершения обучения сети.
6. Если во время выполнения запроса возникает ошибка, а значение переменной Error равно нулю, то генерируется внутренняя ошибка 605 — ошибка исполнения учителя, управление передается обработчику ошибок, а обработка запроса прекращается.
7. Если во время выполнения запроса возникает ошибка, а значение переменной Error не равно нулю, то обработка запроса прекращается.
Чтение/запись учителя
В данном разделе описаны запросы, позволяющие загрузить учителя с диска или из памяти, выгрузить учителя и сохранить текущего учителя на диске или в памяти.
Прочитать учителя (inAdd)Описание запроса:
Pascal:
Function inAdd(CompName: PString): Logic;
C:
Logic inAdd(PString CompName)
Описание аргумента:
CompName — указатель на строку символов, содержащую имя файла компонента или адрес описания компонента.
Назначение — читает учителя с диска или из памяти.
Описание исполнения.
1. Если в качестве аргумента CompName дана строка, первые четыре символа которой составляют слово File, то остальная часть строки содержит имя компонента и после пробела имя файла, содержащего компоненту. В противном случае считается, что аргумент CompName содержит указатель на область памяти, содержащую описание компонента в формате для записи на диск. Если описание не вмещается в одну область памяти, то допускается включение в текст описания компонента ключевого слова Continue, за которым следует четыре байта, содержащие адрес следующей области памяти.
2. Если в данный момент загружен другой учитель, то выполняется запрос inDelete. Учитель считывается из файла или из памяти.
3. Если считывание завершается по ошибке, то возникает ошибка 602 — ошибка считывания учителя, управление передается обработчику ошибок, а обработка запроса прекращается.
Удаление учителя (inDelete)Описание запроса:
Pascal:
Function inDelete: Logic;
C:
Logic inDelete()
Аргументов нет.
Назначение — удаляет загруженного в память учителя.
Описание исполнения.
1. Если список в момент получения запроса учитель не загружен, то возникает ошибка 601 — неверное имя учителя, управление передается обработчику ошибок, а обработка запроса прекращается.
Запись компонента (inWrite)Описание запроса:
Pascal:
Function inWrite(Var FileName: PString): Logic;
C:
Logic inWrite(PString* FileName)
Описание аргументов:
CompName — указатель на строку символов, содержащую имя компонента.
FileName — имя файла или адрес памяти, куда надо записать компонент.