Документация к библиотеке nnp.obj, для ОС Колибри. Эта библиотека создана для работы с нейросетями (neural network perceptron). Видео по нейросетям: 1, 2. Исходный код (язык java), на основе которого делалсь библиотека: 3.
Последнее обновление библиотеки 01.03.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
Эта функция получает указатели на функции работы с памятью, вызыватся должна при загрузке библиотеки. Можете использовать макрос @use_library, для ее автоматической настройки.
Создает слои нейросети и заполняет веса случайными значениями от -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.
Функция расчета значений выходных нейронов. На вход подаються значения входных нейронов. На выходе возвращается указатель на слой выходных нейронов.
n_input dq ?,?,? ... stdcall [NNP_FeedForward], nnp_0,n_input
где nnp_0 - структура буфера, n_input - указатель на данные входных нейронов.
Функция для обучения сети. Пример:
n_targ dq ?,?,? ... stdcall [NNP_BackPropagation], nnp_0, n_targ
где nnp_0 - структура буфера, n_targ - указатель на данные для обучения сети.
Берет данные нейросети и записывает их в указанное место в памяти. Пример:
f_data dd ? ... stdcall [NNP_GetMemData], nnp_0, NNP_FF_JSON, [f_data]
где nnp_0 - структура буфера, f_data - указатель на данные для записи параметров сети.
Берет данные из указанного места памяти и записывает их в нейросеть. Пример:
f_data dd ? ... stdcall [NNP_SetMemData], nnp_0, NNP_FF_JSON, [f_data]
где nnp_0 - структура буфера, f_data - указатель на данные с параметрами сети.
Освобождает память занятую нейросетью.
Константа для функций NNP_GetMemData и NNP_SetMemData. Указывает бинарный формат ввода и вывода данных.
Константа для функций NNP_GetMemData и NNP_SetMemData. Указывает текстовый (JSON) формат ввода и вывода данных.
Пример таблицы экспорта, расчитанной на использование макроса @use_library_mem:
align 4 import_nnp_lib: dd sz_lib_init NNP_Create dd sz_nnp_create NNP_FeedForward dd sz_nnp_FeedForward NNP_BackPropagation dd sz_nnp_BackPropagation NNP_GetMemData dd sz_nnp_GetMemData NNP_SetMemData dd sz_nnp_SetMemData NNP_Destroy dd sz_nnp_Destroy dd 0,0 sz_lib_init db 'lib_init',0 sz_nnp_create db 'NNP_Create',0 sz_nnp_FeedForward db 'NNP_FeedForward',0 sz_nnp_BackPropagation db 'NNP_BackPropagation',0 sz_nnp_GetMemData db 'NNP_GetMemData',0 sz_nnp_SetMemData db 'NNP_SetMemData',0 sz_nnp_Destroy db 'NNP_Destroy',0
01.03.22 - самая первая версия библиотеки (примеры использования возможно будут позже).