Оглавление

Вступление

Документация к библиотеке nnp.obj, для ОС Колибри. Эта библиотека создана для работы с нейросетями (neural network perceptron). Видео по нейросетям: 1, 2. Исходный код (язык java), на основе которого делалсь библиотека: 3.

Последнее обновление библиотеки 28.05.22.

Функции

Все функции (кроме lib_init) 1-м параметром принимают указатель на структуру NeuralNetwork. Описание структуры NeuralNetwork:

struct NeuralNetwork
	learningRate  dq ? ;+ 0 скорость обучения
	layers        dd ? ;+ 8 [] слои
	layers_length dd ? ;+12 число слоев
	activation    dd ? ;+16 указатель на функцию активации
	derivative    dd ? ;+20 указатель на функцию
	errors        dd ? ;+24 массив для вычислений
	errorsNext    dd ? ;+28
	gradients     dd ? ;+32
	deltas        dd ? ;+36
ends

lib_init

Эта функция получает указатели на функции работы с памятью, вызыватся должна при загрузке библиотеки. Можете использовать макрос @use_library, для ее автоматической настройки.

NNP_Create

Создает слои нейросети и заполняет веса случайными значениями от -1 до 1. Пример:

NNLOPT_LEN equ 7
nnlopt dd 2,8,8,8,8,8,3
...
stdcall [NNP_Create], nnp_0, 0.01, 0, 0, nnlopt, NNLOPT_LEN

где nnp_0 - структура нейросети.

0.01 - скорость обучения.

0 - адрес функции активации, если 0 то берется стандартная функция внутри библиотеки.

0 - адрес функции свёртки, если 0 то берется стандартная функция внутри библиотеки.

nnlopt - массив с числом нейронов на каждом слое.

NNLOPT_LEN - длинна массива nnlopt.

NNP_Reset

Сброс параметров нейросети. Для каждого слоя базисный вектор и веса заполняются случайными числами от -1 до 1. Такие же действия происходят в конструкторе NNP_Create.

stdcall [NNP_Reset], nnp_0

где nnp_0 - структура нейросети.

NNP_FeedForward

Функция расчета значений выходных нейронов. На вход подаються значения входных нейронов. На выходе возвращается указатель на слой выходных нейронов.

n_input dq ?,?,?
...
stdcall [NNP_FeedForward], nnp_0,n_input

где nnp_0 - структура нейросети, n_input - указатель на данные входных нейронов.

NNP_BackPropagation

Функция для обучения сети. Пример:

n_targ dq ?,?,?
...
stdcall [NNP_BackPropagation], nnp_0, n_targ

где nnp_0 - структура нейросети, n_targ - указатель на данные для обучения сети.

NNP_GetMemData

Берет данные нейросети и записывает их в указанное место в памяти. Пример:

f_data dd ?
...
stdcall [NNP_GetMemData], nnp_0, NNP_FF_JSON, [f_data]

где nnp_0 - структура нейросети, f_data - указатель на данные для записи параметров сети.

NNP_SetMemData

Берет данные из указанного места памяти и записывает их в нейросеть. В случае успеха в регистре eax возвращается 0, иначе указатель на строку с текстом ошибки. Пример:

f_data dd ?
...
stdcall [NNP_SetMemData], nnp_0, NNP_FF_JSON, [f_data]

где nnp_0 - структура нейросети, f_data - указатель на данные с параметрами сети.

NNP_Destroy

Освобождает память занятую нейросетью.

Константы

NNP_FF_BIN equ 0x6e6962

Константа для функций NNP_GetMemData и NNP_SetMemData. Указывает бинарный формат ввода и вывода данных.

NNP_FF_JSON equ 0x6e6f736a

Константа для функций NNP_GetMemData и NNP_SetMemData. Указывает текстовый (JSON) формат ввода и вывода данных.

Таблица экспорта

Пример таблицы экспорта, расчитанной на использование макроса @use_library_mem:

align 4
import_nnp_lib:
	dd sz_lib_init
	NNP_Create      dd sz_create
	NNP_Reset       dd sz_reset
	NNP_FeedForward dd sz_feedforward
	NNP_BackPropagation dd sz_backpropagation
	NNP_GetMemData  dd sz_getmemdata
	NNP_SetMemData  dd sz_setmemdata
	NNP_Destroy     dd sz_destroy
dd 0,0
	sz_lib_init     db 'lib_init',0
	sz_create       db 'NNP_Create',0
	sz_reset        db 'NNP_Reset',0
	sz_feedforward  db 'NNP_FeedForward',0
	sz_backpropagation db 'NNP_BackPropagation',0
	sz_getmemdata   db 'NNP_GetMemData',0
	sz_setmemdata   db 'NNP_SetMemData',0
	sz_destroy      db 'NNP_Destroy',0

Пример

В данном примере создаются 8 объектов (точек с координатами x, y), каждый из которых имеет тип 0 (синие) или 1 (зеленые). При нажатии кнопки происходит тренировка нейросети. В процессе тренировки нейросеть учится определять какой цвет должен соответствовать заданным координатам x, y. Тренировать сеть можно много раз, число циклов тренировки показано в заголовке окна. Кнопка переставляет точки случайным образом. Кнопка сбрасывает состояние нейросети.

Рис. 1. Пример использования библиотеки

История

01.03.22 - самая первая версия библиотеки.

28.05.22 - пример использования библиотеки, новая функция NNP_Reset, обновление функции NNP_SetMemData.