README.md

Описание спецификации хранения весов нейронной сети по определенной топологии

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

Структура указателей на функцию и проверка на инициализацию данных функций

Ниже представлена структура, которая в себе содержит список сигнатур функций. Каждая функция в данной структуре должна быть проинициализирована, т.к. данный API ожидает их существования.

typedef struct {      tpgnn_open ptr_tpgnn_open;      tpgnn_allocate ptr_tpgnn_allocate;      tpgnn_free ptr_tpgnn_free;      tpgnn_realloc ptr_tpgnn_realloc;      tpgnn_calloc ptr_tpgnn_calloc;      tpgnn_read ptr_tpgnn_read;
     tpgnn_write ptr_tpgnn_write;      tpgnn_close ptr_tpgnn_close;      tpgnn_seek ptr_tpgnn_seek; }TPGNN_ADDRES_FUNCTION;

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

Таблица с сигнатурами функций.

</tr>
<tr>
	<td style="vertical-align: middle;"> 8</td>
	<td style="vertical-align: middle;"><font color="#e0ac00">tpgnn_close</font></td>
	<td style="vertical-align: middle;"><font color="#e0ac00">int </font>(*<font color="#44bb4c">tpgnn_close</font>)(<font color="#e0ac00">TPGNN_FILE</font></td>
	<td style="vertical-align: middle;">Данная функция забирает управление потока <font color="#e0ac00">TPGNN_FILE</font> и закрывает файловый поток</td>
</tr>
<tr>
	<td style="vertical-align: middle;">9</td>
	<td style="vertical-align: middle;"><font color="#e0ac00">tpgnn_seek</font></td>
	<td style="vertical-align: middle;"><font color="#e0ac00">int </font>(*<font color="#44bb4c">tpgnn_seek</font> )(<font color="#e0ac00">TPGNN_FILE </font>ptr_file, <font color="#e0ac00">long unsigned int</font> offset, <font color="#e0ac00">long unsigned int</font> origin)</td>
	<td style="vertical-align: middle;"> Данная функция устанавливает значения потокового файла с позиции origin, которая имеет одно из следующих значений <font color="#004d99"> SEEK_SET, SEEK_CUR, SEEK_END</font> до позиции, к которому добавляется offset</td>
</tr>
typedef Сигнатура функции Описание работы функции
1 tpgnn_open TPGNN_FILE (*tpgnn_open)(const char*, const char*) Данная функция должна открыть файл и передает управление потоку TPGNN_FILE , первый аргумент данная функция принимает имя файла, второй аргумент является режимом доступа к файлу
2 tpgnn_allocate void*(*tpgnn_allocate)(long unsigned int) Данная функция выделяет память из кучи
3 tpgnn_free void(*tpgnn_free)(void*) или void(*tpgnn_free)(void*, long unsigned int) Данная функция освобождает память из кучи. Если вам необходимо указать размер освобождаемой памяти, то используйте макрос COUNT_MEMORY_ON
4 tpgnn_realloc void*(*tpgnn_realloc)(void*, long unsigned int) Данная функция копирует старые данные в новую память (возможна увеличения размера буфера)
5 tpgnn_calloc void*(*tpgnn_calloc)(long unsigned int, long unsigned int) Данная функция выделяет память, первый аргумент указывает количество элементов для данного массива, второй аргумент указывается на размер данного типа. Так же данная функция инициализирует данный массив нулями
6 tpgnn_read TPGNN_FILE (*tpgnn_read )(void* data, long unsigned int size_type, long unsigned int count_elements, TPGNN_FILE ptr_file) Данная функция производит чтение данных из файла
7 tpgnn_write TPGNN_FILE (*tpgnn_write )(void* data, long unsigned int size_type, long unsigned int count_elements, TPGNN_FILE ptr_file) Данная функция производит запись данных в файл
Ниже представлена функция, которая производит проверку инициализации адресов функций

tpgnn_result >tpgnn_validation_initialization_addres_function( TPGNN_ADDRES_FUNCTION* addr);

tpgnn_result - данный тип является перечислением, которая указывает коды возврата. Ниже приведена таблица, с кодами возврата:
TPGNN_ADDRES_FUNCTION* - указатель на структуру, в котором содержится таблица адресов функций.

КОДЫ ВОЗВРАТА

tpgnn_result Описание перечисления
1 TPGNN_SUCCESS Функция выполнилась работу и завершилась корректно
2 TPGNN_FAILED_OPEN_FILE Получение ошибки в случае когда функция не смогла прочитать файл
3 TPGNN_FAILED_FUNCTION_OPEN Получение ошибки, когда функция tpgnn_open не про инициализирована (работает только в режиме DEBUG)
4 TPGNN_FAILED_FUNCTION_ALLOCATE Получение ошибки, когда функция tpgnn_allocate не про инициализирована (работает только в режиме DEBUG)
5 TPGNN_FAILED_FUNCTION_FREE Получение ошибки, когда функция tpgnn_free не про инициализирована (работает только в режиме DEBUG)
6 TPGNN_FAILED_FUNCTION_REALLOC Получение ошибки, когда функция tpgnn_realloc не про инициализирована (работает только в режиме DEBUG)
7 TPGNN_FAILED_FUNCTION_CALLOC Получение ошибки, когда функция tpgnn_calloc не про инициализирована (работает только в режиме DEBUG)
8 TPGNN_FAILED_FUNCTION_WRITE Получение ошибки, когда функция tpgnn_write не про инициализирована (работает только в режиме DEBUG)
9 TPGNN_FAILED_FUNCTION_READ Получение ошибки, когда функция tpgnn_read не про инициализирована (работает только в режиме DEBUG)
10 TPGNN_FAILED_FUNCTION_CLOSE Получение ошибки, когда функция tpgnn_close не про инициализирована (работает только в режиме DEBUG)
11 TPGNN_FAILED_FUNCTION_SEEK Получение ошибки, когда функция tpgnn_seek не про инициализирована (работает только в режиме DEBUG)
12 TPGNN_FAILED_MATCH_SIGNATURE Получение ошибки, когда сигнатура файла не соответствует стандарту

Описание структуры файла.

Данный файл описывается тремя секциями: 1. Заголовок с описанием занимаемой памяти в файле; 2. Подробное описание одного слоя полносвязной сети; 3. Описание общей структуры полносвязной сети.

1. Заголовок с описанием занимаемой памяти в файле.

Данная структура описывает параметры, которые указывают на объем памяти занимаемая рядом типов, которые описывают количество слоев, количество каналов, коэффициенты, перечисления функций активации и перечисления метрических пространств.

1 Сигнатура файла "TPGNN" 5 байт
2 Количество байт на описание количество слоев 1 байт
3 Количество байт на количество каналов 1 байт
4 Количество байт на 1 коэффициент 1 байт
5 Количество байт на перечисление функций активации 1 байт
6 Количество байт на перечисление метрических пространств 1 байт
Ниже представлена структура:

typedef struct {

      unsigned char* signature;
      unsigned char size_memory_count_layer_neural_network;
      unsigned char size_memory_cannel;
      unsigned char size_memory_coefficient;
      unsigned char size_enum_function_activation;
      unsigned char size_enum_metric;

}tpgnn_signature_memory;

signature - данная переменная определяет сигнатуру файла, в случае, если сигнатура данного файла, не соответствует строке “TGPNN” , то функция которая приведена ниже выкинет код возврата TPGNN_FAILED_MATCH_SIGNATURE;

size_memory_count_layer_neural_network - данная переменная описывает размер памяти переменной, которая отвечает за количество слоев;

size_memory_cannel - данная переменная описывает размер памяти переменной, которая отвечает за количество каналов;

size_memory_coefficient - данная переменная описывает размер памяти переменной, которая отвечает за размер коэффициента;

size_enum_function_activation - данная переменная описывает размер памяти переменной, которая отвечает за перечислении функции активации.

size_enum_metric - данная переменная описывает размер памяти переменной, которая отвечает за перечисление метрических пространств.

tpgnn_read_file_signature_mem - данная функция записывает данные в структуру tpgnn_signature_memory. Важное примечание, данную функцию необходимо использовать, если существует файл с содержимой топологией нейронной сети.

Ниже приведена сигнатура данной функции:

tpgnn_result tpgnn_read_file_signature_mem(

const char* name_file,
tpgnn_signature_memory* mem,
TPGNN_ADDRES_FUNCTION* tpgnn_addr_fn
)

name_file - данная переменная является именем файла, с которого необходимо считать данные;

mem - в данную переменную записывается информация о памяти переменных, которые будут использоваться в дальнейшем чтении файла;

tpgnn_addr_fn - данная переменная передает список функций, которые будут использоваться в данной функции.

2. Подробное описание одного слоя полносвязной сети.

Данная структура представляет из себя следующее: 1. Функция активации; 2. Матрица коэффициентов; 3. Вектор свободных коэффициентов.

typedef struct {

tpgnn_type_function name_function;
void * matrix_coefficient;
void * vector_free_coefficient;
}

name_function - данная переменная описывает функцию активации в текущем слое;

matrix_coefficient - данная переменная является матрицей коэффициентов в текущем слое;

vector_free_coefficient - данная переменная описывает вектор свободных коэффициентов в текущем слое нейронной сети.

name_function описывается перечислением tpgnn_type_function. Ниже представлена таблица с различными типами функций.

Таблица функций активации.

Тип функций
1 TPGNN_ACTIVATION_FUNCTION_RELU
2 TPGNN_ACTIVATION_FUNCTION_TH
3 TPGNN_ACTIVATION_FUNCTION_SIGMOID
4 TPGNN_ACTIVATION_FUNCTION_POLINOM
5 TPGNN_ACTIVATION_FUNCTION_SOFTMAX
6 TPGNN_ACTIVATION_FUNCTION_FOURIER
7 TPGNN_ACTIVATION_FUNCTION_FINISH

3 . Описание общей структуры полносвязной сети

  1. Метрическое пространство.
  2. Количество слоев.
  3. Вектор с количеством каналов на каждом слое.
  4. Вектор структуры с топологией слоя.
#define TPGNN_PERCEPTRON(Def_Type_1, Def_Type_2) \
typedef struct                                   \
{                                                \
tpgnn_type_metric name_metric;                   \
                                                 \
Def_Type_1 count_layer_neural_network;           \
Def_Type_2* array_layers;                        \
Def_Type_1 counter;                              \
tpgnn_layer_perceptron* array_layer_perceptron;  \
}tpgnn_perceptron;                                                                

name_metric - данная переменная является перечислением, в котором указывается метрическое пространство;

count_layer_neural_network - данная переменная указывает количество слоев в нейронной сети;

array_layers - данная переменная является массивом, который описывает все каналы для каждого слоя в нейронной сети;

counter - является счетчиком, который перечисляет все слои;

array_layer_perceptron - данная переменная является массивом, в котором храниться данные о каждом слое.

name_metric - описывается перечислением tpgnn_type_metric. Ниже представлена таблица с различными типами метрических пространств.

Таблица метрических пространств.

enum описание
1 TPGNN_METRIC_SQUARE квадрат Евклидовой нормы

Функция tpgnn_read_file выполняет чтение из файла и записывает данные в структуру tpgnn_perceptron, которая описывает топологию нейронной сети.

tpgnn_result tpgnn_read_file(

const char* name_file,
tpgnn_perceptron* perceptron,
tpgnn_signature_memory* mem,
TPGNN_ADDRES_FUNCTION* tpgnn_addr_fn
)

tpgnn_result - возвращает результат ошибки;

name_file - данная переменная передает имя файла;

mem - данная переменная передает структуру, которая получает информацию о значении памяти данных, которые были перечислены ранее;

perceptron - в данную переменную записывается топология нейронной сети;

tpgnn_addr_fn - данная переменная передает список функций, которые были проинициализированы.

Функция tpgnn_write_file записывает данные из структур tpgnn_signature_memory, tpgnn_perceptron в файл с именем name_file

tpgnn_result tpgnn_write_file(

const char* name_file,
tpgnn_perceptron* perceptron,
tpgnn_signature_memory* mem,
TPGNN_ADDRES_FUNCTION* tpgnn_addr_fn
)

name_file - данная переменная передает имя файла;

mem - данная переменная передает структуру, которая получает информацию о значении памяти данных, которые были перечислены ранее;

perceptron - в данную переменную записывается топология нейронной сети;

fn_addr - данная переменная передает список функций, которые были проинициализированы.

Конвейеры
0 успешных
0 с ошибкой