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 été 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à été 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
|
|
|
|
|
|
|
/*
|
2022-12-09 22:18:58 +01:00
|
|
|
* Les deux réseaux donnés sont supposés de même dimensions,
|
|
|
|
* Applique les modifications contenues dans delta à network
|
2022-06-30 10:25:04 +02:00
|
|
|
*/
|
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
|