tipe/src/mnist/include/neural_network.h

89 lines
2.1 KiB
C
Raw Normal View History

2022-04-01 15:41:54 +02:00
#include <stdio.h>
#include <stdlib.h>
2022-04-25 10:29:36 +02:00
#include <stdint.h>
2022-04-01 15:41:54 +02:00
#include <string.h>
#include <math.h>
#include <time.h>
2022-04-26 11:39:29 +02:00
#include "neuron.h"
2022-04-01 15:41:54 +02:00
#ifndef DEF_NEURAL_NETWORK_H
#define DEF_NEURAL_NETWORK_H
2022-09-30 15:44:28 +02:00
2022-06-30 10:25:04 +02:00
/*
* Fonction max pour les floats
*/
2022-04-05 09:08:39 +02:00
float max(float a, float b);
2022-06-30 10:25:04 +02:00
2022-04-05 09:08:39 +02:00
float sigmoid(float x);
2022-06-30 10:25:04 +02:00
2022-04-25 14:39:45 +02:00
float sigmoid_derivative(float x);
2022-06-30 10:25:04 +02:00
2022-04-18 17:49:50 +02:00
float leaky_ReLU(float x);
2022-06-30 10:25:04 +02:00
2022-04-25 14:39:45 +02:00
float leaky_ReLU_derivative(float x);
2022-06-30 10:25:04 +02:00
/*
* Remplace le pointeur par un réseau de neurones qu'elle crée
* et auquel elle alloue de la mémoire aux différentes variables
*/
2022-05-14 10:28:40 +02:00
void network_creation(Network* network, int* neurons_per_layer, int nb_layers);
2022-06-30 10:25:04 +02:00
/*
* Libère l'espace mémoire alloué dans le pointeur aux différentes
* variables dans la fonction 'creation_du_network'
*/
2022-05-14 10:28:40 +02:00
void deletion_of_network(Network* network);
2022-06-30 10:25:04 +02:00
/*
* Effectue une propagation en avant du réseau de neurones lorsque
* les données on é insérées dans la première couche. Le résultat
* de la propagation se trouve dans la dernière couche
*/
2022-05-14 10:28:40 +02:00
void forward_propagation(Network* network);
2022-06-30 10:25:04 +02:00
/*
* Renvoie la liste des sorties voulues à partir du nombre voulu
*/
2022-05-14 10:28:40 +02:00
int* desired_output_creation(Network* network, int wanted_number);
2022-06-30 10:25:04 +02:00
/*
* Effectue une propagation en arrière du réseau de neurones
* lorsqu'une forward_propagation a déjà é effectuée
*/
2022-05-14 10:28:40 +02:00
void backward_propagation(Network* network, int* desired_output);
2022-06-30 10:25:04 +02:00
/*
* Modifie les poids et le biais des neurones du réseau de neurones
* après une ou plusieurs backward_propagation
*/
2022-05-14 10:28:40 +02:00
void network_modification(Network* network, uint32_t nb_modifs);
2022-06-30 10:25:04 +02:00
/*
* Initialise les variables du réseau de neurones
*/
2022-05-14 10:28:40 +02:00
void network_initialisation(Network* network);
2022-06-30 10:25:04 +02:00
/*
* Les deux réseaux donnés sont supposés de même dimensions
*/
2022-05-14 10:28:40 +02:00
void patch_network(Network* network, Network* delta, uint32_t nb_modifs);
2022-06-30 10:25:04 +02:00
/*
* Les deux réseaux donnés sont supposés de même dimensions
*/
2022-05-19 22:26:19 +02:00
void patch_delta(Network* network, Network* delta, uint32_t nb_modifs);
2022-06-30 10:25:04 +02:00
/*
* Renvoie une copie modifiable du réseau de neurones
*/
2022-05-14 10:28:40 +02:00
Network* copy_network(Network* network);
2022-06-30 10:25:04 +02:00
/*
* Renvoie l'erreur du réseau de neurones pour un numéro voulu
*/
float loss_computing(Network* network, int wanted_number);
2022-04-01 15:41:54 +02:00
#endif