Книга: Учебное пособие по курсу «Нейроинформатика»

Язык описания предобработчика

Язык описания предобработчика

Предобработчик является составным объектом. В состав этого объекта входят частные предобработчики, правила распределения входных данных и входных сигналов сети между частными предобработчиками. Предобработчик при выполнении запроса на предобработку вектора входных данных получает на входе вектор исходных данных, а возвращает вектор входных сигналов сети.

Каждый частный интерпретатор ответа получает на входе вектор входных данных, которые он предобрабатывает, а на выходе дает вектор входных сигналов сети. Каждый частный интерпретатор описывается в виде процедурного блока.

В табл. 22 приведен список ключевых слов языка описания предобработчика, дополняющий список ключевых слов, приведенных в разделе «Общий стандарт». Кроме того, ключевыми словами являются имена стандартных предобработчиков, приведенные в табл. 21.

Таблица 21. Стандартные предобработчики

Идентификатор Параметры Тип Описание
BinaryPrep MinSignals, MaxSignals: Real; Unknown: Real; Type: Logic. Binary Бинарный признак. Предобработка в соответствии с табл. 4 главы «Предобработчик».
UnOrdered MinSignals, MaxSignals: Real; Unknown: Real; Num: Long Unordered Неупорядоченный качественный признак. Предобработка в соответствии с табл. 5 главы «Предобработчик».
Ordered MinSignals, MaxSignals: Real; Unknown: Real; Num: Long Ordered Упорядоченный качественный признак. Предобработка в соответствии с табл. 6 главы «Предобработчик».
EmptyPrep MinData, MaxData, Unnown, MinSignals, MaxSignals: Real Number Простейшая предобработка в соответствии с формулой (1) главы «Предобработчик».
ModPrep MinSignals, MaxSignals: Real; Unknown: Real; Y: RealArray Number Модулярная предобработка в соответствии с формулой (16) главы «Предобработчик».
FuncPrep MinSignals, MaxSignals, Unknown: Real; Y: RealArray; F: FuncType Number Функциональная предобработка в соответствии с формулой (17) главы «Предобработчик».
PositPrep MinSignals, MaxSignals, Unnown, Y: Real; Num: Long Number Позиционная предобработка в соответствии с формулой (19) главы «Предобработчик».

Таблица 22. Ключевые слова языка описания предобработчика.

Идентификатор Краткое описание
Connections Начало блока описания распределения входных данных и сигналов.
Contents Начало блока описания состава интерпретатора.
Data Имя, по которому адресуются входные данные, начало блока описания входных данных
Include Предшествует имени файла, целиком вставляемого в это место описания.
NumberOf Функция. Возвращает число обрабатываемых частным предобработчиком входных данных или сигналов.
Prep Начало заголовка описания частного предобработчика.
Preparator Заголовок раздела файла, содержащий описание интерпретатора.
Signals Имя, по которому адресуются входные сигналы; начало блока описания сигналов.

БНФ языка описания предобработчика

Обозначения, принятые в данном расширении БНФ и описание ряда конструкций приведены в разделе «Описание языка описания компонентов».

<Описание предобработчика>::= <Заголовок> [<Описание функций>] [<Описание частных предобработчиков>] <Описание состава> [<Установление параметров>] [<Описание сигналов>] [<Описание данных>] [<Описание распределения сигналов>] [<Описание распределения данных>] <Конец описания предобработчика>
<Заголовок>::= Preparator <Имя предобработчика> ( <Список формальных аргументов>)
<Имя предобработчика>::= <Идентификатор>
<Описание частных предобработчиков>::= <Описание частного предобработчика> [<Описание частных предобработчиков>]
<Описание частного предобработчика>::= <Заголовок описания предобработчика> [<Описание статических переменных>] [<Описание переменных>] <Тело предобработчика>
<Заголовок описания предобработчика>::= Prep <Имя частного предобработчика> ([(<Список формальных аргументов>)])
<Имя частного интерпретатора>::= <Идентификатор>
<Тело предобработчика>::= Begin <Составной оператор> End
<Описание состава>::= Contents <Список имен предобработчиков>;
<Список имен предобработчиков>::= <Имя предобработчика> [,<Список имен предобработчиков>]
<Имя предобработчика>::= <Псевдоним>: {<Имя ранее описанного интерпретатора> | <Имя стандартного интерпретатора>} [[ <Число экземпляров >]] [(<Список фактических аргументов>)]
<Псевдоним>::= <Идентификатор>
<Число экземпляров >::= <Целое число>
<Имя ранее описанного интерпретатора>::= <Идентификатор>
<Имя стандартного интерпретатора>::= <Идентификатор>
<Установление параметров>::= <Установление параметров Частного предобработчика> [;<Установление параметров>]
<Описание сигналов>::= Signals <Константное выражение типа Long >
<Описание данных>::= Data<Константное выражение типа Long >
<Описание распределения сигналов>::= <Описание распределения Сигналов, Предобработчика, Частного предобработчика, Signals>
<Описание распределения данных>::= <Описание распределения Данных, Предобработчика, Частного предобработчика, Data>
<Конец описания предобработчика>::= End Preparator

Описание языка описания предобработчика

Структура описания предобработчика имеет вид: заголовок; описание функций; описание частных предобработчиков; описание состава; установление параметров; описание сигналов; описание данных; описание распределения сигналов; описание распределения данных; конец описания предобработчика.

Заголовок состоит из ключевого слова Preparator и имени предобработчика и служит для обозначения начала описания предобработчика в файле, содержащем несколько компонентов нейрокомпьютера.

Описание функций — фрагмент описания, в котором описаны функции, необходимые для работы предобработчиков.

Описание частного предобработчика — это описание процедуры, вычисляющей входные сигналы нейронной сети по входным данным. Формальные аргументы служат для задания размерностей обрабатываемых векторов. При выполнении частный предобработчик получает в качестве аргументов два вектора — входных данных и входных сигналов. Формально, при исполнении частный предобработчик имеет описание следующего вида:

Pascal:

Procedure Preparator(Data, Signals: PRealArray);

C:

void Preparator(PRealArray Data; PRealArray Signals);

В разделе описания состава перечисляются частные предобработчики, входящие в состав предобработчика. Признаком конца раздела служит символ «;».

В необязательном разделе установления параметров производится задание значений параметров (статических переменных) частных предобработчиков. После ключевого слова SetParameters следует список значений параметров в том порядке, в каком параметры были объявлены при описании частного интерпретатора (для стандартных интерпретаторов порядок параметров соответствует порядку, приведенному в описании стандартных предобработчиков в разделе «Стандартные предобработчики»). При использовании одного оператора задания параметров для задания параметров нескольким экземплярам одного частного предобработчика после ключевого словаsetparameters указывается столько выражений, задающих значения параметров, сколько необходимо для одного экземпляра.

В необязательном разделе «описание сигналов» указывается число сигналов, вычисляемых предобработчиком. Если этот раздел опущен, то полагается, что число вычисляемых предобработчиком сигналов равно сумме сигналов, вычисляемых всеми частными предобработчиками. В константном выражении возможно использование функции NumberOf, аргументом которой является имя частного предобработчика (или его псевдоним) и ключевое слово Signals, в качестве второго аргумента.

В необязательном разделе «описание данных» указывается число входных данных, предобрабатываемых предобработчиком. Если этот раздел опущен, то полагается, что число предобрабатываемых предобработчиком данных равно сумме данных, предобрабатываемых всеми частными предобработчиками. В константном выражении возможно использование функции NumberOf, аргументом которой является имя частного предобработчика (или его псевдоним) и ключевое слово Data, в качестве второго аргумента.

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

Наиболее часто встречающиеся интерпретаторы объявлены стандартными. Для стандартных интерпретаторов описание частных интерпретаторов отсутствует.

Кроме того, в любом месте описания интерпретатора могут встречаться комментарии, заключенные в фигурные скобки.

Пример описания предобработчика

В этом разделе приведены два примера описания одного и того же предобработчика для метеорологической задачи. Используется следующий состав предобработчика: первый элемент вектора входных данных (температура воздуха) обрабатывается простейшим предобработчиком (EmptyPrep); второй (облачность) — бинарным предобработчиком (BinaryPrep); третий (направление ветра) — предобработчиком неупорядоченных качественных признаков (UnOrdered); четвертый (осадки) — предобработчиком неупорядоченных качественных признаков (Ordered).

В первом примере приведено описание дубликатов всех стандартных предобработчиков. Во втором — использованы стандартные предобработчики.

Пример 1.

Preparator Meteorology
Function Sigmoid(X Real): Real;
Begin
 Sigmoid = X / (1 + Abs(X))
End;
Prep BinaryPrep1() {Предобработка бинарного признака}
Static
 Real MinSignals Name "Нижняя граница интервала приемлемых сигналов";
 Real MaxSignals Name "Верхняя граница интервала приемлемых сигналов";
 Real Unknown Name"Значение сигнала, если значение входного признака не определено";
 Logic Type Name "Тип предобработки бинарного признака";
Begin
 If TLong(Data[1]) = UnknownLong Then Signals[1] = Unknown
 Else Begin
  If Type Then Begin
   If TLong(Data[1]) = 1 Then Signals[1] = 0 Else Begin
    If MaxSignals =0 Then Signals[1] = MinSignals
    Else Signals[1] = MaxSignals
   End
   Else Begin
    If TLong(Data[1]) = 1 Then Signals[1] = MinSignals
    Else Signals[1] = MaxSignals
   End
  End
 End
{Предобработка упорядоченного качественного признака}
Prep UnOrdered1(Num : Long)
Static
 Real MinSignals Name "Нижняя граница интервала приемлемых сигналов";
 Real MaxSignals Name "Верхняя граница интервала приемлемых сигналов";
 Real Unknown Name"Значение сигнала, если значение входного признака не определено";
Var
 Integer I;
Begin
 If TLong(Data[1]) = UnknownLong Then Begin
  For I = 1 To Num Do
   Signals[I] = Unknown
 End Else Begin
  For I = 1 To Num Do
   Signals[I] = MinSignals
  Signals[TLong(Data[1])] = MaxSignals
 End
End
Prep Ordered1(Num : Long) {Предобработка упорядоченного качественного признака}
Static
 Real MinSignals Name "Нижняя граница интервала приемлемых сигналов";
 Real MaxSignals Name "Верхняя граница интервала приемлемых сигналов";
 Real Unknown Name"Значение сигнала, если значение входного признака не определено";
Var
 Integer I;
Begin
 If TLong(Data[1]) = UnknownLong Then Begin
  For I = 1 To Num Do
   Signals[I] = Unknown
 End Else Begin
  For I = 1 To TLong(Data[1]) Do
   Signals[I] = MaxSignals
  For I = TLong(Data[1])+1 To Num Do
   Signals[I] = MinSignals
 End
End
Prep EmptyPrep1() {Предобработчик, осуществляющий масштабирование и сдвиг сигнала}
Static
 Real MinSignals Name "Нижняя граница интервала приемлемых сигналов";
 Real MaxSignals Name "Верхняя граница интервала приемлемых сигналов";
 Real Unknown Name"Значение сигнала, если значение входного признака не определено";
 Real MinData Name"Значения нижней границы интервала изменения входных данных";
 Real MaxData Name"Значения верхней границы интервала изменения входных данных";
Begin
 If Data[1] = UnknownReal Then Signals[1] = Unknown
 Else Signals[1] = (Data[1] – MinData) * (MaxSignals – MinSignals) / (MaxData – MinData) + MinSignals
End
Prep ModPrep1(Num : Long) {Модулярный предобработчик}
Static
 Real MinSignals Name "Нижняя граница интервала приемлемых сигналов";
 Real MaxSignals Name "Верхняя граница интервала приемлемых сигналов";
 Real Unknown Name "Значение сигнала, если значение входного признака не определено";
 RealArray[Num] Y Name "Массив величин, используемых для предобработки"
Var
 Integer I;
Begin
 If Data[1] = UnknownReal Then Begin
  For I = 1 To Num Do
   Signals[I] = Unknown
 End Else Begin
  For I = 1 To Num Do
   Signals[I] = (Data[1] RMod Y[I] + Y[I]) * (MaxSignals – MinSignals) / (2 * Y[I]) + MinSignals
 End
Prep FuncPrep1(Num : Long; F : FuncType) {Функциональный предобработчик}
Static
 Real MinSignals Name "Нижняя граница интервала приемлемых сигналов";
 Real MaxSignals Name "Верхняя граница интервала приемлемых сигналов";
 Real Unknown Name "Значение сигнала, если значение входного " +
  "признака не определено";
 Real MinData Name "Значения нижней границы интервала изменения значений функции F ";
 Real MaxData Name "Значения верхней границы интервала изменения значений функции F";
 RealArray[Num] Y Name "Массив величин, используемых для предобработки"
Var
 Integer I;
Begin
 If Data[1] = UnknownReal Then Begin
  For I = 1 To Num Do
   Signals[I] = Unknown
 End Else Begin
  For I = 1 To Num Do
   Signals[1] = (F(Data[1] – Y[1] – MinData) * (MaxSignals – MinSignals) / (MaxData – MinData) + MinSignals
 End
Prep PositPrep1(Num : Long) {Позиционный предобработчик}
Static
 Real MinSignals Name "Нижняя граница интервала приемлемых сигналов"
 Real MaxSignals Name "Верхняя граница интервала приемлемых сигналов"
 Real Unknown Name"Значение сигнала, если значение входного признака не определено";
 Real Y Name "Основание системы счисления"
Var
 Integer I;
 Real W, Q;
Begin
 If Data[1] = UnknownReal Then Begin
  For I = 1 To Num Do
   Signals[I] = Unknown
 End Else Begin
  W = Data[1];
  For I = 1 To Num Do Begin
   Q = W RMod Y;
   Signals[I] = Q * (MaxSignals – MinSignals) / Y + MinSignals;
   W = (W - Q) / Y
  End;
 End
Contents Temp : EmptyPrep1, Cloud : BinaryPrep1, Wind : UnOrdered1(8), Rain : Ordered1(3);
{Для всех предобработчиков приемлемые значения входных сигналов лежат в интервале от -1 до 1. В случае неопределенного значения во входных данных все сигналы данного предобработчика полагаются равными нулю. Входные данные первого предобработчика меняются от 273 до 293}
Temp SetParameters -1, 1, 1E-40, 273, 293;
CloudSetParameters -1, 1, 0, True;
Wind SetParameters -1, 1, 0;
RainSetParameters -1, 1, 0
Signals NumberOf(Signals,Temp) + NumberOf(Signals, Cloud) + NumberOf(Signals, Wind(8)) + NumberOf(Signals, Rain(3))
Data NumberOf(Data,Temp) + NumberOf(Data, Cloud) + NumberOf(Data,Wind(8)) + NumberOf(Data, Rain(3))
Connections
 Temp.Data <=> Data[1];
 Cloud.Data <=> Data[2];
 Wind.Data <=> Data[3];
 Rain.Data <=> Data[4];
 Temp.Signals <=> Signals[1];
 Cloud.Signals <=> Signals[2];
 Wind.Signals[1..8] <=> Signals[3..10];
 Rain.Signals[1..3] <=> Signals[11..13]
End Preparator

Пример 2.

Preparator Meteorology
Contents Temp : EmptyPrep, Cloud : BinaryPrep, Wind : UnOrdered(8), Rain : Ordered(3);
Temp SetParameters -1, 1, 1E-40, 273, 293
End Preparator

Оглавление книги


Генерация: 1.608. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз