tipe/src/cnn/include/update.h

42 lines
1.1 KiB
C

#include "struct.h"
#ifndef DEF_UPDATE_H
#define DEF_UPDATE_H
/*
* 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
/*
* 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);
/*
* Met à jours les poids à partir de données obtenus après plusieurs backpropagations
* Puis met à 0 tous les d_weights
*/
void update_weights(Network* network, Network* d_network);
/*
* Met à jours les biais à partir de données obtenus après plusieurs backpropagations
* Puis met à 0 tous les d_bias
*/
void update_bias(Network* network, Network* d_network);
/*
* 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