Добавить в корзинуПозвонить
Найти в Дзене

fv21cnet уже на Си (с 24.06.2024г.)

Структура fv21cnet:
ссылка на архив: neural-net-c.zip
float* w; // Массив для всех весов нейронов float* b; // Массив смещений каждого нейрона float step; // Шаг обучения применяемый к каждому нейрону при обучении int* planes; // Список нейроных плоскостей каждого слоя например: {784, 80, 10} int* windex; // Массив индексов весов доступа из общего массива весов w[] int* bindex; // Массив индексов смещений доступа из общего массива смещений b[] int epochs; // Кол-во полных проходов сети int wmax; // Общее количество весов нейросети int bmax; // Общее количество смещений нейросети int psize; // Размер массива слоёв planes int activator; // Переменная метода активации нейронов: A_SIGMOID, A_RELU Структура BMP_FILE:
unsigned char type[2]; // Содержит ASCII-коды символов «BM»
long size; // Размер файла в байтах
long reserved; // Резерв
long offset; // Смещение в байтах от начала файла до графических данных
long ssize; // Размер последующей части структуры
long width; // Ширина по X

Структура fv21cnet:
ссылка на архив:
neural-net-c.zip
float* w; // Массив для всех весов нейронов

float* b; // Массив смещений каждого нейрона

float step; // Шаг обучения применяемый к каждому нейрону при обучении

int* planes; // Список нейроных плоскостей каждого слоя например: {784, 80, 10}

int* windex; // Массив индексов весов доступа из общего массива весов w[]

int* bindex; // Массив индексов смещений доступа из общего массива смещений b[]

int epochs; // Кол-во полных проходов сети

int wmax; // Общее количество весов нейросети

int bmax; // Общее количество смещений нейросети

int psize; // Размер массива слоёв planes

int activator; // Переменная метода активации нейронов: A_SIGMOID, A_RELU

Структура BMP_FILE:
unsigned char type[2]; // Содержит ASCII-коды символов «BM»
long size; // Размер файла в байтах
long reserved; // Резерв
long offset; // Смещение в байтах от начала файла до графических данных
long ssize; // Размер последующей части структуры
long width; // Ширина по X
long height; // Высота по Y
short planes; //Задает количество плоскостей (Пока оно всегда устанавливается в 1)
short bitcolor; // Количество бит на один пиксель
long compression; // Тип сжатия
long sizeimage; // Размер картинки в байтах
long xpelspermeter; // Кол-во пикселей на метр по X
long ypelspermeter; // Кол-во пикселей на метр по Y
long colorused; // Кол-во используемых цветов из таблицы
long colorimportant; // количество важных цветов
unsigned char palette[1024]; // Палитра 256х4 (4 байта на цвет)

A_SIGMOID - индификатор для активатора (например: name_neural_network->activator = A_SIGMOID)

A_RELU - индификатор активатора (например: name_neural_network->activator = A_RELU)

float fv21atof(char *s) - метод-аналог atof() пребразует строку *s в число типа float

int fv21atoi(char* s) - тоже метод-аналог atoi(char* s) преобразует строку *s в число типа int

примечание: взят свой т.к. стандартный метод не удовлетворяет некоторым требованиям библиотеки fv21cnet

float fv21derivsigmoid(float x) - метод производной от активационной функции sigmoid

float fv21sigmoid(float x) - метод активационной функции sigmoid

float fv21relu(float x) - метод активационной функции ReLU

void fv21reset(fv21cnet* net) - инициализатор всех нейронов сети, где net указатель на структуру fv21cnet

float* fv21for(fv21cnet* net, int xL, float* i_sum) - метод осуществляющий проход одного слоя, где xL - номер слоя, i_sum - указатель на массив входных данных

float* fv21fors(fv21cnet* net, float* x) - метод прохода всех слоёв сети, x - входные данные для первого слоя сети

float* fv21unionfors(fv21cnet** n_net, float* x, unsigned int x_pin_len) - метод прямого опроса множества сетей как одну общую n_net - указатель на множество нейросетей типа fv21cnet

x - указатель на одномерный массив входных данных, x_pin_len - кол-во выходов нейросетевого объединения

float fv21normalize_float(float x_num, float out_max, float out_min, float in_max, float in_min) - метод нормализации числа x_num, out_max - максимум выходного значения,

out_min - минимум выходного значения, in_max - максимум входного и in_min - минимум входного значения, возвращает значение типа float

void fv21write(fv21cnet* net, char* filename) - метод записи нейросети net структурного типа fv21cnet, filename - имя файла

void fv21read(fv21cnet* net, char* filename) - метод чтения нейросети net структурного типа fv21cnet, filename - имя файла

void fv21train(fv21cnet* net, float** data, float** all_trues, unsigned int data_len) - метод обучения однослойной сети, описание входных переменных есть выше

fv21cnet* fv21create(int* iplanes, int insize) - метод создания нейросети типа fv21cnet возвращает саму нейросеть,

iplanes - указатель на массив слоёв сети, например iplanes[] = {2, 2, 1} где: первое значение ко-во входов сети, второе кол-во нейронов скрытого слоя и третье кол-во выходов

примечание: скрытых слоёв может быть больше одного, например iplanes[] = {2, 4, 2, 1}

float** csv_load_float(char* filename, unsigned int* in_len) - загрузка CSV-файлов, filename - имя файла с расширением например: file.csv,

in_len - указатель на переменную (в ней будет длина считанного файла)

unsigned char** csv_load_uchar(char* filename, unsigned int* in_len) - - загрузка CSV-файлов, возвращает указатель на двухмерный массив загруженных данных

void csv_file_build(char* in_filename, char* out_filename, unsigned int indf, unsigned int cMax) - вспомогательный метод для пересборки csv-файла,

indf - число как фильтр для выборки из файла in_filename кол-ва строк cMax и сохранение в выходной файл out_filename

fv21cnet** fv21gcreate(unsigned int in_rows) - метод для создания группы сетей типа fv21cnet кол-вом in_rows подсетей

float*** new_3_float(unsigned int in_plan, unsigned int in_rows, unsigned int in_columns) - создание трёхмерного массива, возвращает указатель на сам массив

float** new_2_float(unsigned int in_rows, unsigned int in_columns) - создание двухмерного массива, так же возвращает указатель на массив

float* new_1_float(unsigned int in_rows) - создание одномерного массива и возвращает указатель на массив

unsigned char* new_1_uchar(unsigned int in_rows) - создаёт массив типа char, возвращает также указателем

unsigned char** new_2_uchar(unsigned int in_rows, unsigned int in_columns) - тоже создаёт массив уже двухмерным и указатель на него

void delete_3_float(float*** in_3_float, unsigned int in_rows, unsigned int in_columns) - корректно очищает трехмерный массив типа float

void delete_2_float(float** in_2_float, unsigned int in_rows) - очищает как и в педыдущем методе уже двухмерный массив

void delete_2_uchar(unsigned char** in_2_uchar, unsigned int in_rows) всё как и в предыдущем только уже массив типа char

void fv21delete(fv21cnet* net) - очищает сеть net типа fv21cnet

void fv21gdelete(fv21cnet** net) - очищает группу сетей созданную методом fv21gcreate()

float* pack_matrix(float* data, unsigned int pack_size, unsigned int x_max, unsigned int y_max) - экспериментальный метод сжатия картинки data в pack_size раз форматом x_max * y_max

BMP_FILE* bmp_open(char* infile) - открывает файл infile формата *.bmp не более 8bit color и возвращает указатель типа BMP_FILE (заголовок)

unsigned char* bmp_load(char* inFileName) - читает bmp-файл inFileName

void save_bmp(BMP_FILE* h_bmp, char* inFileName, unsigned char* out_bmp) - сохраняет массив типа char с растром картинки по заголовку h_bmp