Книга: Учебное пособие по курсу «Нейроинформатика»
Язык описания учителя
Разделы на этой странице:
Язык описания учителя
В отличие от таких компонентов как оценка, сеть и интерпретатор ответа, учитель не является составным объектом. Однако учитель может состоять из множества функций, вызывающих друг друга. Собственно учитель — это процедура, управляющая обучением сети. Ключевые слова, специфические для языка описания учителя приведены в табл. 37.
Библиотеки функций учителя
Библиотеки функций учителя содержат описание функций, необходимых для работы одного или нескольких учителей. Использование библиотек позволяет избежать дублирования функций в различных учителях. Описание библиотеки функций аналогично описанию учителя, но не содержит главной процедуры.
Таблица 37. Ключевые слова специфические для языка описания учителя
Идентификатор | Краткое описание |
---|---|
Main | Начало главной процедуры |
Instructor | Заголовок описания учителя |
InstrLib | Заголовок описания библиотеки функций |
Used | Подключение библиотек функций |
Init | Начало блока инициации |
InstrStep | Начало блока одного шага обучения |
Close | Начало блока завершения обучения |
БНФ языка описания учителя
Обозначения, принятые в данном расширении БНФ и описание ряда конструкций приведены в разделе «Описание языка описания компонентов».
<Описание библиотеки>::= <Заголовок библиотеки> <Описание глобальных переменных> <Описание функций> <Конец описания библиотеки>
<Заголовок библиотеки>::= InstrLib <Имя библиотеки> [Used <Список имен библиотек>]
<Имя библиотеки>::= <Идентификатор>
<Список имен библиотек>::= <Имя используемой библиотеки> [,<Список имен библиотек>]
<Имя используемой библиотеки>::= <Идентификатор>
<Конец описания библиотеки>::= EndInstrLib
<Описание учителя>::= <Заголовок учителя> <Описание глобальных переменных> <Описание функций> <Главная процедура> <Конец описания учителя>
<Заголовок учителя>::= Instructor <Имя библиотеки> [Used <Список имен библиотек>]
<Главная процедура>::= Main<Описание статических переменных> <Описание переменных> <Блок инициации> <Блок шага обучения> <Блок завершения>
<Блок инициации>::= Init <Тело функции>
<Блок шага обучения>::= InstrStep <Выражение типа Logic> <Тело функции>
<Блок завершения>::= Close<Тело функции>
<Конец описания учителя> End Instructor
Описание языка описания учителя
Язык описания учителя является наиболее простым из всех языков описания компонент. Фактически все синтаксические конструкции этого языка описаны в разделе «Общий стандарт». В теле функции, являющемся частью главной процедуры недопустим оператор возврата значения, поскольку главная процедура не является функцией. Три раздела главной функции — блок инициации, блок одного шага обучения и блок завершения являются фрагментами одной процедуры. Выделение этих разделов необходимо для выполнения запроса «Выполнить N шагов обучения». Выполнение главной процедуры происходит следующим образом. Выполняется блок инициации. Выполнение блока одного шага обучения сети производится до тех пор, пока не наступит одно из следующих событий:
1. программа выйдет из блока одного шага обучения сети прямым переходом на метку в другом разделе;
2. нарушится условие, указанное в конструкции InstStep;
3. компонент учитель получит запрос «Прервать обучение сети»;
4. в случае выполнения запроса «Выполнить N шагов обучения» блок одного шага обучения сети выполнен N раз.
Далее выполняется блок завершения обучения.
Пример описания учителя
В данном разделе приведены описания некоторых методов обучения, описанных в разделе «Описание алгоритмов обучения».
Пример 1.
Instructor RandomFire; {Метод случайной стрельбы с уменьшением радиуса}
Main {Обучение ведется по всему обучающему множеству}
Label Exit, Exit1;
Static
Integer Try Name "Число попыток при одном радиусе" Default 5;
Real MinRadius Name "Минимальный радиус, при котором + "продолжается работа"Default 0.001;
String NetName Name "Имя сети" Default "";
Integer What Name "Что обучать" Default Parameters;
Color InstColor Name "Цвет примеров обучающего множества" Default HFFFF; {По умолчанию}
Integer OperColor Name "Операция для отбора цветов" Default CIn;
Var {все примеры, в цвете которых есть хоть один единичный бит}
PRealArray Map, DirectMap; {Для хранения текущего и случайного массивов параметров}
Real Est1, Est2; {Для хранения текущей и случайной оценки}
Real Radius; {Текущий радиус}
Integer TryNum, RadiusNum; {Число попыток, номер использованного радиуса}
Integer Handle; {Номер сеанса задачника}
String QName; {Имя запроса}
Init
Begin
If Not SetInstructionObject(What, @NetName) Then GoTo Exit; {Задаем объекты обучения}
QName = "InitSession"; {Задаем имя запроса}
Map = NewArray(mRealArray, 3); {Создаем массив для аргументов запроса}
If Map = Null Then GoTo Exit;
TPointer(Map^[1]) = @InstColor; {Заносим адрес первого аргумента}
TPointer(Map^[2]) = @OperColor; {Заносим адрес второго аргумента}
TPointer(Map^[3]) = @Handle; {Заносим адрес третьего аргумента}
If Not GenerateQuest(@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 = Estimate(Handle, True);
If Error <> 0 Then GoTo Exit;
RadiusNum = 1; {Обрабатываем первый радиус}
Radius = 1 / RadiusNum; {Вычисляем первый радиус}
If Not SaveArray(Map) Then GoTo Exit; {Сохраняем начальный массив параметров}
End
InstrStep Radius > MinRadius {Обработка с одним радиусом – один шаг обучения}
Begin
TryNum = 0;
While TryNum < Try Do Begin
If Not SetArray(Map) Then GoTo Exit; {Устанавливаем лучший массив параметров}
If Not RandomArray(DirectMap) Then GoTo Exit; {Генерируется новый массив параметров}
If Not Modify(DirectMap, 1, Radius) Then GoTo Exit; {Модифицируем массив параметров}
Est2 = Estimate(Handle, True);
If Error <> 0 Then GoTo Exit;
If Est1>Est2 Then Begin
If Not SaveArray(Map) Then GoTo Exit; {Сохраняем лучший массив параметров}
Est1 = Est2;
TryNum = 0;
End Else TryNum = TryNum + 1; {Увеличиваем счетчик отказов}
End
RadiusNum = RadiusNum + 1; {Обрабатываем следующий радиус}
Radius = 1 / RadiusNum; {Вычисляем следующий радиус}
End
Close
Begin
Exit:
If Not SetArray(Map) Then; {Восстанавливаем лучший массив параметров}
If Not EraseArray(Мар1) Then; {Освобождаем вспомогательные массивы}
If Not EraseArray(Мар2) 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
Пример 2. Библиотека функций
InstrLib Library1; {Библиотека содержит функции для следующего учителя}
{Метод наискорейшего спуска}
Function SDM( Handle : Integer; Step : Real) : Real;
Label Exit, Endd;
Var
Real Est;
Begin
Est = CalcGradient(Handle, True);
If Error <> 0 Then GoTo Exit;
Est =Optimize(Null, Step); {Вызываем функцию подбора оптимального шага}
If Error <> 0Then GoTo Exit;
SDM = Est;
GoTo Endd;
Exit:
SDM = 0;
Endd:
End
{Метод случайного поиска}
Function RDM( Handle : Integer; Step : Real) : Real;
Label Exit, Endd;
Var
Real Est;
PRealArray : Direction;
Begin
Direction = CreateArray; {Создаем вспомогательный массив}
If Direction = Null Then GoTo Exit;
If Not RandomArray(Direction) Then GoTo Exit; {Генерируется новый массив параметров}
If Error <> 0 Then GoTo Exit;
Est =Optimize(Direction, Step); {Вызываем функцию подбора оптимального шага}
If Error <> 0 Then GoTo Exit;
RDM = Est;
GoTo Endd;
Exit:
RDM = 0;
Endd:
End
End InstrLib
Пример 3. Антиовражная процедура обучения.
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; {Освобождаем вспомогательные массивы}
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
- 8.2. Языки программирования Виды программирований
- ПРИМЕР ПРОСТОЙ ПРОГРАММЫ НА ЯЗЫКЕ СИ
- Реализация языка SQL
- Дальнейшее развитие языка SQL
- Язык программирования Python
- 2. Визуальный язык знают все Жест с ручкой в руках
- Программирование на языке Пролог для искусственного интеллекта
- 1. Оператор Select – базовый оператор языка структурированных запросов
- 2. Унарные операции на языке структурированных запросов
- 3. Бинарные операции на языке структурированных запросов
- Фишка шестая. «Язык пользы»
- Компилятор языка С