2022-11-08 18:04:58 +01:00
|
|
|
#include "struct.h"
|
|
|
|
|
2022-11-03 16:28:03 +01:00
|
|
|
#ifndef DEF_UPDATE_H
|
|
|
|
#define DEF_UPDATE_H
|
|
|
|
|
2023-03-01 19:12:57 +01:00
|
|
|
/*
|
|
|
|
* Des valeurs trop grandes dans le réseau risqueraient de provoquer des overflows notamment.
|
|
|
|
* On utilise donc la méthode gradient_clipping,
|
|
|
|
* qui consiste à majorer tous les biais et poids par un hyper-paramètre choisi précédemment.
|
|
|
|
* https://arxiv.org/pdf/1905.11881.pdf
|
|
|
|
*/
|
|
|
|
#define CLIP_VALUE 300
|
2023-01-25 11:18:47 +01:00
|
|
|
|
2023-03-02 10:35:25 +01:00
|
|
|
/*
|
|
|
|
* Réduit la valeur de a si abs(a) > CLIP_VALUE
|
|
|
|
* Renvoie la valeur modifiée càd `signe(a)*min(abs(a), CLIP_VALUE)`
|
|
|
|
*/
|
|
|
|
float clip(float a);
|
|
|
|
|
2022-11-03 16:28:03 +01:00
|
|
|
/*
|
|
|
|
* Met à jours les poids à partir de données obtenus après plusieurs backpropagations
|
|
|
|
* Puis met à 0 tous les d_weights
|
|
|
|
*/
|
2023-01-20 13:41:38 +01:00
|
|
|
void update_weights(Network* network, Network* d_network);
|
2022-11-03 16:28:03 +01:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Met à jours les biais à partir de données obtenus après plusieurs backpropagations
|
|
|
|
* Puis met à 0 tous les d_bias
|
|
|
|
*/
|
2023-01-20 13:41:38 +01:00
|
|
|
void update_bias(Network* network, Network* d_network);
|
2022-11-03 16:28:03 +01:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Met à 0 toutes les données de backpropagation de poids
|
|
|
|
*/
|
|
|
|
void reset_d_weights(Network* network);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Met à 0 toutes les données de backpropagation de biais
|
|
|
|
*/
|
|
|
|
void reset_d_bias(Network* network);
|
|
|
|
|
|
|
|
#endif
|