Subversion Repositories Kolibri OS

Rev

Rev 9733 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
9733 IgorA 1
2
3
библиотека для работы с нейросетью (neural network perceptron)
4
5
45
46
 
47
48
 
49

Оглавление

50
    51
  • Вступление
  • 52
  • Функции
  • 53
      54
    • lib_init
    • 55
    • NNP_Create
    • 9821 IgorA 56
    • NNP_Reset
    • 9733 IgorA 57
    • NNP_FeedForward
    • 58
    • NNP_BackPropagation
    • 59
    • NNP_GetMemData
    • 60
    • NNP_SetMemData
    • 61
    • NNP_Destroy
    • 62
      63
      64
    • Константы
    • 65
    • Таблица экспорта
    • 9821 IgorA 66
    • Пример
    • 9733 IgorA 67
    • История
    • 68
      69
       
      70

      Вступление

      71

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

      72
      2. Исходный код (язык java), на основе которого делалсь библиотека: 3.

      73
       
      9821 IgorA 74

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

      9733 IgorA 75
       
      76

      Функции

      77
       
      78

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

      79
       Описание структуры NeuralNetwork:

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

      lib_init

      93

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

      94
       
      95

      NNP_Create

      96

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

      97
      NNLOPT_LEN equ 7
      98
      nnlopt dd 2,8,8,8,8,8,3
      99
      ...
      100
      stdcall [NNP_Create], nnp_0, 0.01, 0, 0, nnlopt, NNLOPT_LEN
      9821 IgorA 101

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

      9733 IgorA 102

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

      103

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

      104

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

      105

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

      106

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

      107
       
      9821 IgorA 108

      NNP_Reset

      109

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

      110
      stdcall [NNP_Reset], nnp_0
      111

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

      112
       
      9733 IgorA 113

      NNP_FeedForward

      114

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

      115
      n_input dq ?,?,?
      116
      ...
      117
      stdcall [NNP_FeedForward], nnp_0,n_input
      9821 IgorA 118

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

      9733 IgorA 119
       
      120

      NNP_BackPropagation

      121

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

      122
      n_targ dq ?,?,?
      123
      ...
      124
      stdcall [NNP_BackPropagation], nnp_0, n_targ
      9821 IgorA 125

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

      9733 IgorA 126
       
      127

      NNP_GetMemData

      128

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

      129
      f_data dd ?
      130
      ...
      131
      stdcall [NNP_GetMemData], nnp_0, NNP_FF_JSON, [f_data]
      9821 IgorA 132

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

      9733 IgorA 133
       
      134

      NNP_SetMemData

      9821 IgorA 135

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

      9733 IgorA 136
      f_data dd ?
      137
      ...
      138
      stdcall [NNP_SetMemData], nnp_0, NNP_FF_JSON, [f_data]
      9821 IgorA 139

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

      9733 IgorA 140
       
      141

      NNP_Destroy

      142

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

      143
       
      144

      Константы

      145

      NNP_FF_BIN equ 0x6e6962

      146

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

      147

      NNP_FF_JSON equ 0x6e6f736a

      148

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

      149
       
      150

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

      151

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

      152
      align 4
      153
      import_nnp_lib:
      154
      	dd sz_lib_init
      9821 IgorA 155
      	NNP_Create      dd sz_create
      156
      	NNP_Reset       dd sz_reset
      157
      	NNP_FeedForward dd sz_feedforward
      158
      	NNP_BackPropagation dd sz_backpropagation
      159
      	NNP_GetMemData  dd sz_getmemdata
      160
      	NNP_SetMemData  dd sz_setmemdata
      161
      	NNP_Destroy     dd sz_destroy
      162
      dd 0,0
      163
      	sz_lib_init     db 'lib_init',0
      164
      	sz_create       db 'NNP_Create',0
      165
      	sz_reset        db 'NNP_Reset',0
      166
      	sz_feedforward  db 'NNP_FeedForward',0
      167
      	sz_backpropagation db 'NNP_BackPropagation',0
      168
      	sz_getmemdata   db 'NNP_GetMemData',0
      169
      	sz_setmemdata   db 'NNP_SetMemData',0
      170
      	sz_destroy      db 'NNP_Destroy',0
      9733 IgorA 171
      172
       
      9821 IgorA 173

      Пример

      174

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

      175

      176

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

      177
       
      9733 IgorA 178

      История

      9821 IgorA 179

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

      180

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

      9733 IgorA 181
      182