Структура 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