Vous êtes sur la page 1sur 5

Compte rendu TP1 IA

Thomas LECADRE

Reconnaissance de chiffres

L’objectif de ce TP est d’implémenter un réseau de neurones shallow à 2 couches fully connected


pour reconnaître des chiffres.

On va tout d’abord créer la fonction sigmoïde qui nous servira pour plus tard. La sigmoïde est définie
par :

Le code de la sigmoïde est alors :

Grâce au langage Python, cette fonction peut prendre en entrée un scalaire, un vecteur ou bien une
matrice où la sigmoïde s’appliquera dans chaque coefficient.

Nous allons maintenant créer une fonction qui va permettre d’initialiser les .
Il existe plusieurs façons d’initialiser mais nous allons utiliser l’initialisation Glorot uniforme des

poids : qui renvoie une matrice des poids aux


bonnes dimensions.

La fonction prend comme paramètres L_in et L_out qui correspond à la dimension de la couche
courante et de la couche suivante. On va alors créer c puis une matrice de taille (L_out, L_in+1). Nous
avons un +1 pour prendre en compte le biais. On va ensuite appliquer à chaque coefficient un
nombre aléatoire entre -c et c. On a alors :
On va maintenant établir une solution NN pour la reconnaissance des chiffres. Pour cela, on
va réaliser trois tâches :

1.Forward propagation

Grâce à la fonction InitializeWeights, nous avons .

L’activation de la couche cachée et de la couche de sortie se fait par la sigmoïde. Ici, nous avons
m=5000 échantillons. X et y sont les données d’entrée et les étiquettes associés respectivement.
Cependant y est la liste des étiquettes mais nous avons besoin de la matrice y pour nos calculs. Cette
matrice y est défini de la sortie où si y[i]=k, alors la ième ligne de y est remplie de 0 sauf d’un 1 à la
k-ème position.

Exemple : y :[2,3,1] ; y =

Pour arriver à cela, on a :

On code maintenant la forward propagation :

A2t et A3t nous serviront pour plus tard.


2.Loss

Nous allons maintenant faire la loss dont la formule est :

L’opérateur * correspond au produit de Hadamard. De plus, J est un scalaire donc pour chaque
groupe de matrice, on va devoir faire la somme des coefficients.

On crée tout d’abord les matrices et  :

Le code de J est alors :

3.Backward propagation

On applique maintenant la backward propagation suivant les formules suivantes :


On a le code suivant :

La fonction NNLoss renvoi J et Grad :

On va alors renvoyer D1 et D2 dans Theta1_grad et Theta2_grad :

On obtient alors :

On va maintenant lancer le réseau de neurones avec nepochs = 20000 et alpha=0.75. On obtient :


On remarque que la fonction coût est bien strictement décroissante.

Dans le code il y a une fonction qui teste la précision du modèle. On a comme résultat :

Vous aimerez peut-être aussi