Add cnn io doc

This commit is contained in:
augustin64 2022-09-23 15:25:00 +02:00
parent defb14f6cd
commit bf3bddb577
2 changed files with 81 additions and 3 deletions

79
doc/cnn.md Normal file
View File

@ -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]|

View File

@ -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