Описание спецификации хранения весов нейронной сети по определенной топологии
Структура указателей на функцию и проверка на инициализацию данных функций
Ниже представлена структура, которая в себе содержит список сигнатур функций. Каждая функция в данной структуре должна быть проинициализирована, т.к. данный 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 | Описание перечисления |
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 . Описание общей структуры полносвязной сети
- Метрическое пространство.
- Количество слоев.
- Вектор с количеством каналов на каждом слое.
- Вектор структуры с топологией слоя.
#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 - данная переменная передает список функций, которые были проинициализированы.