From bf3bddb57790fb5e9cc51d48d178724d7eecfa93 Mon Sep 17 00:00:00 2001 From: augustin64 Date: Fri, 23 Sep 2022 15:25:00 +0200 Subject: [PATCH] Add cnn io doc --- doc/cnn.md | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ doc/nn.md | 5 ++-- 2 files changed, 81 insertions(+), 3 deletions(-) create mode 100644 doc/cnn.md diff --git a/doc/cnn.md b/doc/cnn.md new file mode 100644 index 0000000..70c87cd --- /dev/null +++ b/doc/cnn.md @@ -0,0 +1,79 @@ +# Réseau de neurones convolutionnel [lien](/src/cnn) + +## Lecture/ Écriture du réseau de neurone: +Le fichier est au format IDX (format binaire) +Les informations sont stockées de la manière suivante: + +### Header +type | nom de la variable | commentaire +:---:|:---:|:---: +uint32_t|magic_number|Variable servant à vérifier que le fichier n'est pas corrompu, vaut ... +uint32_t|size|Nombre de couches du réseau +uint32_t|initialisation|Fonction d'initialisation du réseau +uint32_t|dropout|Probabilité d'abandon +uint32_t|input_width[0]| +uint32_t|input_depth[0]| +uint32_t|...| +uint32_t|...| +uint32_t|input_width[n]| +uint32_t|input_depth[n]| +uint32_t|type_couche[0]| +uint32_t|...| +uint32_t|type_couche[n]| + +> type_couche: +> | 0 -> cnn +> | 1 -> nn +> | 2 -> pooling + +### Pré-corps: + +On stocke pour chaque couche des informations supplémentaires en fonction de son type: + +#### Si la couche est un cnn: +type | nom de la variable | commentaire +:---:|:---:|:---: +uint32_t|activation| +uint32_t|k_size| +uint32_t|rows| +uint32_t|columns| + +#### Si la couche est un nn: +type | nom de la variable | commentaire +:---:|:---:|:---: +uint32_t|activation| +uint32_t|input_units| +uint32_t|output_units| + +#### Si la couche est de type pooling: +type | nom de la variable | commentaire +:---:|:---:|:---: +uint32_t|pooling| + + +### Corps +On constitue ensuite le corps du fichier à partir des données contenues dans chauqe couche de la manière suivante: + +- Si la couche est de type pooling, on ne rajoute rien. + +- Si la couche est de type cnn, on ajoute les biais et poids de manière croissante sur leurs indices: + +type | nom de la variable | commentaire +:---:|:---:|:---: +uint32_t|bias[0][0][0]|biais +uint32_t|...| +uint32_t|bias[cnn->columns-1][cnn->k_size-1][cnn->k_size-1]| +uint32_t|w[0][0][0][0]|poids +uint32_t|...| +uint32_t|w[cnn->rows][cnn->columns-1][cnn->k_size-1][cnn->k_size-1]| + +- Si la couche est de type nn, on ajoute les poids de manière croissante sur leurs indices: + +type | nom de la variable | commentaire +:---:|:---:|:---: +uint32_t|bias[0]|biais +uint32_t|...| +uint32_t|bias[nn->output_units-1]|biais +uint32_t|weights[0][0]|poids +uint32_t|...| +uint32_t|weights[nn->input_units-1][nn->output_units-1]| diff --git a/doc/nn.md b/doc/nn.md index 6c8432f..f11d2de 100644 --- a/doc/nn.md +++ b/doc/nn.md @@ -11,7 +11,7 @@ uint32_t|magic_number|Variable servant à vérifier que le fichier n'est pas cor uint32_t|network->nb_layers|Nombre de couches du réseau uint32_t|network->layers[0]->nb_neurons|Nombre de neurones de la première couche uint32_t|network->layers[1]->nb_neurons|Nombre de neurones de la deuxième couche -uint32_t|...|- +uint32_t|...| uint32_t|network->layers[n-1]->nb_neurons|Nombre de neurones de la n-ième couche uint32_t|network->layers[1]->nb_neurons|Nombre de neurones de la deuxième couche @@ -23,6 +23,5 @@ type | nom de la variable | commentaire float|activation|importance du neurone dans le réseau float|biais|biais du neurone float|weights[0]|poids vers le premier neurone de la couche suivante -float|weights[1]|poids vers le deuxième neurone de la couche suivante -float|...|- +float|...| float|weights[n-1]|poids vers le dernier neurone de la couche suivante \ No newline at end of file