tipe/doc/cnn/neuron_io.md

2.2 KiB

Neuron IO

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 1012
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[size-1]
uint32_t input_depth[size-1]
uint32_t type_couche[0]
uint32_t ...
uint32_t type_couche[size-1]

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 linearisation
uint32_t k_size
uint32_t rows
uint32_t columns
uint32_t stride
uint32_t padding

Si la couche est un nn:

type nom de la variable commentaire
uint32_t activation
uint32_t linearisation
uint32_t size_input
uint32_t size_output

Si la couche est de type pooling:

type nom de la variable commentaire
uint32_t linearisation
uint32_t pooling
uint32_t stride
uint32_t padding

Corps

On constitue ensuite le corps du fichier à partir des données contenues dans chaque 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
float bias[0][0][0] biais
float ...
float bias[cnn->columns-1][cnn->k_size-1][cnn->k_size-1]
float weights[0][0][0][0] poids
float ...
float weights[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
float bias[0] biais
float ...
float bias[nn->size_output-1] biais
float weights[0][0] poids
float ...
float weights[nn->size_input-1][nn->size_output-1]