Module de Reconnaissance de Formes, EFREI, 2006-2007, Benoît Decoux
1
Reconnaissance des Formes
Travaux Pratiques, 2e séance /4
Carte auto-organisatrice de Kohonen
Rétro-propagation du gradient
Modalités de déroulement
séance en salle Linux
compte-rendu à remettre à l'issue de la séance
site web, documents et programmes utiles :
- Site RDF : http://www-rdf.efrei.fr
- Support de cours,
- Corrigés des TP 2001-2002 n° 3 et 2003-2004 n°2 (rubrique Module EFREI
Documents utiles du site RDF),
- Projet C++ "retro.zip" (adaptation du programme-source "libneural", disponible dans
la rubrique Programmes du site)
Objectif de la séance
Programmation de la rétropropagation du gradient à partir des sources de "libneural" ; il
s’agit d’un implémentation simple de la version de base de la rétro-propagation du
gradient, permettant une ré-utilisation rapide) ;
Etude de différents paramètres du réseau et de l’algorithme, pour 3 fichiers de données
correspondant à des caractères ou des chiffres manuscrits :
caract_holland.don : caractéristiques extraites d’images de caractères manuscrits
(hollandais) ;
chiffres.don : images de taille 28x28 pixels, représentant des
caractères manuscrits, normalisés en taille et en position
optdigits.don. : caractéristiques extraites d’images de caractères manuscrits.
Exercices
I) "Carte auto-organisatrice de Kohonen appliquée à la classification"
Il a été vu en cours que les cartes auto-organisatrices étaient en général appliquées à
l’analyse de données, dans le but de détecter des regroupements (ou "clusters"). On peut
cependant l’adapter facilement à la classification.
I.1) Appliquer l’algorithme de base de Kohonen aux données du fichier "chiffres.don".
Commenter les résultats (on pourra s’aider pour cela du petit document "SOM.pdf", placé
dans la rubrique "Documents" du site). Tester quelques valeurs différentes des paramètres
de l’algorithme (voisinage, taux d’apprentissage, etc).
I.2) Appliquer la version supervisée de l’algorithme aux même données, avec les valeurs des
paramètres par défaut puis quelques autres valeurs de paramètres. Indiquer les taux de
reconnaissance obtenus à chaque fois.
Module de Reconnaissance de Formes, EFREI, 2006-2007, Benoît Decoux
2
II) "Rétro-propagation du gradient"
1) Analyse de "libneural"
Analyser rapidement les sources de "libneural" et donner la structure du réseau de
neurones qui y est implémenté (nombre de couches, nombre de neurones par couche, fonction
de transfert des neurones, etc). Etablir quelques liens avec l'algorithme d'apprentissage en
mode instantané, et les équations de la rétropropagation (cf résumé de cours). Décrire les
applications traitées dans le programme original et le programme ajouté ("retro.cpp").
2) Algorithme de base appliqué à données correspondant à des lettres ou chiffres
manuscrits : fichiers "caract_holland.don", "optdigits.don" et "chiffres.don"
On cherche à déterminer les paramètres adéquats du réseau et de l’algorithme pour
obtenir les meilleurs résultats de classification possible. Ces paramètres sont :
nombre de neurones dans la couche cachée (« c » dans la ligne de commande)
taux d’apprentissage (« a »)
nombre d’itérations d’apprentissage (« i »)
2.1) Exécuter la méthode en prenant les paramètres suivant : a=0,05, c=5 et i=100000, avec
les trois fichiers de données. Utiliser le fichier de résultats généré par le programme
pour effectuer un affichage graphique de l’évolution des taux de reconnaissance sur la
base d’apprentissage et sur la base de test, sous Scilab (on pourra s’inspirer pour cela
de l’affichage réalisé dans le corrigé du TP n°2 2003-2004).
On lance le programme avec les paramètres demandés dans la ligne de commande :
./rpg ../DATA/caract_holland.don c=5 i=100000 a=0,05
./rpg ../DATA/chiffres.don c=5 i=100000 a=0,05
./rpg ../DATA/optdigits.don c=5 i=100000 a=0,05
Pour obtenir l’affichage graphique des résultats, on peut utiliser le petit programme suivant :
// Affichage graphique du taux de reconnaissance global en fonction des iterations d'apprentissage
x=1:nb_cycles_app
xbasc();
xgrid(1);
plot(taux_global(x));
xtitle("Fonctions radiales de base","Episodes","Taux de reconnaissance global");
Voici les résultats obtenus :
2.2) Pour rechercher des valeurs adéquates des paramètres, il faut effectuer un ensemble de
tests, en automatisant la procédure. Les paramètres de l’algorithme pouvant être entrés
par la ligne de commande, on peut utiliser un fichier texte (qui sera rendu exécutable)
dans lequel seront copiées les différentes commandes à lancer. Tester de cette manière
quelques valeurs différentes du taux d’apprentissage et du nombre de neurones cachés,
toujours pour les mêmes fichiers de données.
Module de Reconnaissance de Formes, EFREI, 2006-2007, Benoît Decoux
3
On place les commandes dans un fichier que l’on appellera par exemple « retro », sans
extension, que l’on rend exécutable par exemple avec la commande :
chmod 777 retro
On choisit les valeurs suivantes pour les paramètres :
c=5, 10, 15, 20, 25
i=100000
a=0,01 ; 0,05 ; 0,2
On génère un fichier de commandes, par exemple pour Optdigits :
./rpg ../DATA/optdigits.don c=5 i=100000 a=0,01
./rpg ../DATA/optdigits.don c=10 i=100000 a=0,01
./rpg ../DATA/optdigits.don c=15 i=100000 a=0,01
./rpg ../DATA/optdigits.don c=20 i=100000 a=0,01
./rpg ../DATA/optdigits.don c=25 i=100000 a=0,01
./rpg ../DATA/optdigits.don c=5 i=100000 a=0,05
./rpg ../DATA/optdigits.don c=10 i=100000 a=0,05
./rpg ../DATA/optdigits.don c=15 i=100000 a=0,05
./rpg ../DATA/optdigits.don c=20 i=100000 a=0,05
./rpg ../DATA/optdigits.don c=25 i=100000 a=0,05
./rpg ../DATA/optdigits.don c=5 i=100000 a=0,2
./rpg ../DATA/optdigits.don c=10 i=100000 a=0,2
./rpg ../DATA/optdigits.don c=15 i=100000 a=0,2
./rpg ../DATA/optdigits.don c=20 i=100000 a=0,2
./rpg ../DATA/optdigits.don c=25 i=100000 a=0,2
puis le fichier équivalent pour caract_holland.don et chiffres.don.
Les meilleurs résultats obtenus sont les suivants :
Résultats :
chiffres : 97,33% (30 NCC ; alpha=0,3 ; 100000 IA)
caract : 84% (80 NCC ; alpha=0,3 ; 1000000 IA)
iris : 96,7% (5 NCC ; alpha=0,3 ; 100000 IA)
wine : 98,6% (25 NCC ; alpha=0,3 ; 100000 IA)
2.3) Interpréter ces courbes et tenter de mettre en évidence l'apprentissage par cœur (qui se
manifeste par une amélioration initiale du taux de reconnaissance sur les données de test,
suivie par une dégradation).
L’apprentissage par cœur se manifeste par un taux de reconnaissance sur les données
d’apprentissage tendant vers 100%, et un taux sur les données de test se dégradant au fur et à
mesure des itérations d’apprentissage, après une progression initiale.
2.4) Modifier le programme pour tester l'apprentissage en mode différé (off-line) : cumul de
l'erreur et modification des poids après présentation de toute la base. On pourra s’inspirer
pour cela de la méthode utilisée dans le programme compet.c pour sélectionner tous les
vecteurs de la liste d’apprentissage ou de la liste de test une seule fois.
//Recherche d'un vecteur représentatif pour chaque classe
Module de Reconnaissance de Formes, EFREI, 2006-2007, Benoît Decoux
4
// (obtention par la moyenne de 'nb_ex_rep' vecteurs de chaque classe)
nb_vec_tmp=nb_vec;
for(j=0 ; j<nb_cl ; j++)
{
for(k=0 ; k<nb_vec_rep ; k++)
{
do
num=(int)(nb_vec*alea_0a1());
while((vec2+num)->n_cl != j+1); //jusqu'à ce qu'on tombe sur un vecteur de cette classe
calcul_moyenne(vec2+num, k+1, &((cl+j)->repr));
retirer_vec_liste(vec2, &nb_vec_tmp, num);
}
}
3) Modification de la règle d’apprentissage
Il existe une méthode permettant d’accélérer la convergence de l’apprentissage,
consistant à ajouter un terme de lissage appelé « moment » dans la règle d’apprentissage.
Ce terme permet d’augmenter le taux d’apprentissage sans provoquer d’oscillations. Il est
défini par :
η
.()wn
ij 1
n est l’indice de l’itération d’apprentissage actuelle (et donc n-1 l’itération
précédente). La variation des poids ne dépend donc plus que du gradient mais également
de la variation précédente. Implémenter cette méthode et mettre l’accélération de
l’apprentissage en évidence, en utilisant un ensemble de paramètres judicieusement
choisi.
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !