Метод. Основным типом вычислителей являются методы обработки матричных данных, или просто методы.
Метод —
это преобразование данных,
которое принимает на входе некоторое количество
входных аргументов и записывает результат в
выходные аргументы.
Аргументами являются многомерные матрицы.
"Некоторое количество" означает ни одного, один или более одного аргумента.
Такая общая структура вычислителя принята во многих системах обработки
матричных данных, например в MatLab.
Отличие maCom заключается в том, что несколько методов могут
объединяться в один алгоритм и работать совместно.
Алгоритм объединяет несколько взаимосвязанных методов. Это позволяет реализовать концепцию обучаемых (настраиваемых) алгоритмов преобразования информации.
Матричный алгоритм —
это совокупность методов с общим списком параметров.
Методы алгоритма могут свободно считывать и записывать параметры алгоритма.
Классические алгоритмы распознавания имеют
два метода: настройки и вычисления. Метод настройки формирует набор параметров
на основе входной (обучающей) информации. Метод вычисления реализует основное
преобразование данных, используя настроенные значения того же самого набора параметров.
В общем случае алгоритм может иметь более двух методов, например для поэтапной настройки,
для расширения состава обучающей выборки (дообучения), для оценивания качества настройки,
для настройки с применением процедуры кросс-проверки, и т.д.
Методы алгоритма обязаны хранить свою внутреннюю информацию только в параметрах, и обмениваться информацией только через параметры. Это позволяет унифицировать процедуры сохранения, загрузки и просмотра внутреннего состояния алгоритмов.
Допускаются алгоритмы, имеющие только один метод. Такие алгоритмы реализуют необучаемые процедуры обработки данных.
Списки и деревья. Параметры алгоритмов, методы алгоритмов и матричные аргументы методов хранятся в виде списков ячеек.
Список ячеек —
это универсальная структура данных,
позволяющая хранить значения произвольных типов:
числа, строки, матрицы, методы, списки, потоки.
К элементам списков можно обращаться как по именам,
так и по порядковым номерам.
Ячейка списка может в свою очередь хранить еще один список. Это позволяет создавать деревья ячеек с любым уровнем вложенности.
Дерево алгоритма. Каждый алгоритм хранится в виде отдельного дерева. На первом уровне этого дерева находится поддерево параметров "Param" и по одному поддереву для каждого метода. Поддерево метода состоит из двух списков — списка входных аргументов "Input" и списка выходных аргументов "Output". Аргументы являются многомерными матрицами.
Типичная структура алгоритма иллюстрируется следующей таблицей:
Имя элемента | Назначение элемента |
Param |
поддерево параметров |
Debug |
параметр Debug — поток вывода отладочной информации |
coeff |
параметр с именем coeff |
Tune |
метод настройки (в общем случае имя метода произвольно) |
Input |
список входных аргументов |
St|F |
двумерная матрица |
St|{goal} |
вектор-столбец |
Output |
список выходных аргументов (в данном случае пуст) |
Calc |
метод настройки (в общем случае имя метода произвольно) |
Input |
список входных аргументов |
Sc|F |
двумерная матрица |
Output |
список выходных аргументов |
Sc|{y} |
вектор-столбец |
Потоки. Любой объект maCom может быть сохранен в поток и считан из потока. Например, при сохранении алгоритма происходит запись всего дерева параметров и всех методов, включая их матричные аргументы. Потоки имеют одинаковый интерфейс независимо от типа носителя (файл, строка, окно, внешнее приложение, и т. д.).
Библиотеки методов. Реализации методов объединяются в динамические библиотеки методов. Каждый метод реализуется в виде отдельного объекта с очень простым интерфейсом ImaMethodDef, состоящим из функций вычисления и инициализации метода. Библиотека методов предоставляет компонент, способный создавать экземпляры методов по указанному символьному имени алгоритма. Процесс создания методов скрыт от пользователя и выполняется автоматически при создании алгоритма. Состав методов в алгоритме определяется разработчиком библиотеки, а также порядком загрузки библиотек, поскольку одна библиотека может переопределять методы, описанные в другой библиотеке.