Vous êtes sur la page 1sur 4

Reconnaissance des Formes et M´ethodes Neuronales (RCP208)

TP N o 4

Ce TP comporte deux parties : les perceptrons multicouches (suite du TP3) et les cartes topologiques (introduction de la toolbox Matlab).

Partie 1

Dans cette partie, nous allons utiliser les r´eseaux de neurones de type perceptron multicouches (PMC) sur un probl`eme r´eel de classification, il s’agit des Iris de Fisher.

Les donn´ees : les Iris de Fisher correspondent a` 150 fleurs d´ecrites par 4 variables quanti- tatives : longueur du s´epale, largeur du s´epale, longueur du p´etal et largeur du p´etal. Les 150 fleurs sont r´eparties en 3 diff´erentes esp`eces : iris setosa, iris versicolor et iris virginica Chaque classe est compos´ee de 50 fleurs. La classe setosa est lin´eairement s´eparable des deux autres, alors que versicolor et virginica ne le sont pas. Le fichier iris don.mat contient les vecteurs d’entr´ee en dimension 4 d´ecrivant les 150 iris. Le

fichier iris cls.mat contient les classes des 150 iris.

Pour lire ces fichiers faire :

load -ascii iris don.mat

load -ascii iris cls.mat

Codage des sorties : Le codage classique des sorties d´esir´ees pour la classification utilise un neurone de sortie par classe, avec une valeur d´esir´ee haute pour le neurone de la classe correcte, et une valeur d´esir´ee faible pour les autres classes. Nous allons utiliser le codage suivant :

classe 1 (1 0 0) classe 2 (0 1 0) classe 3 (0 0 1) Vous pouvez g´en´erer la matrice de sortie en utilisant les instructions Matlab suivantes :

>> iris output=zeros(150,3); >> iris output(find(iris cls==1),1)=1; >> iris output(find(iris cls==2),2)=1 ; >> iris output(find(iris cls==3),3)=1;

Rappels : cas d’un PMC avec une couche cach´ee

1. Initialisation : d´efinir une architecture et initialiser les poids

Net = mlp(nin, nhidden, nout,outfunc);

nin : nombre de neurones en entr´ee.

nhidden : nombre de neurones cach´es.

nout : nombre de neurones en sortie.

outfunc : fonction d’activation pour la couche de sortie

outfunc = ’linear’, ’logistic’ ou ’softmax’

help mlp pour plus de d´etails.

1

2.

Cycle d’apprentissage

[Net, options] = netopt(Net, options, x, t, alg);

alg = ’scg’ ,’conjgrad’ ou ’quasinew’ (algorithme d’optimisation)

help netopt pour plus de d´etails

3. Tester le r´eseau

Ycal = mlpfwd(Net, X);

La fonction mlpfwd permet de calculer la sortie Ycal calcul´ee par le r´eseau Net pour l’entr´ee X. Supposons que Yt est la sortie d´esir´ee pour l’entr´ee X. On peut alors avoir une id´ee de la qualit´e de notre apprentissage en comparant Yt `a Ycal.

Travail `a faire

Notre objectif est de comprendre l’influence des diff´erents param`etres sur la qualit´e de l’apprentissage. Nous allons faire plusieurs apprentissages en faisant varier ces divers param`etres.

1. Premi`ere exp´erience

Utiliser les 130 premi`eres iris pour l’apprentissage et les autres pour le test.

Utiliser 3 neurones cach´es.

Pour un probl`eme de classification, il vaut mieux utiliser des fonctions d’activation non lin´eaires a` la couche de sortie. Utiliser la fonction ’softmax’.

Faire 100 cycles d’apprentissage (options(14)=100)

2. Autres exp´eriences

Faire varier le nombre de points dans l’ensemble d’apprentissage.

Faire varier le nombre de neurones cach´es.

Faire varier le nombre de cycles d’apprentissage.

Utiliser deux ou trois variables seulement.

Pour chacune de ces experiences,

´evaluer l’erreur de classification au moyen de la matrice de confusion.

Identifier les instances mal class´ees.

Par exemple, vous pouvez utiliser les instructions Matlab suivantes :

>> Ycalculee=mlpfwd(Net,iris input); >> classe t=iris cls; >> [max y classe y]=max(Ycalculee’); >> classe y=classe y’; >> exemples mal classes=find(classe t=classe y); >> NetClass=zeros(150,3); >> NetClass(find(classe y==1),1)=1; >> NetClass(find(classe y==2),2)=1; >> NetClass(find(classe y==3),3)=1; >> conffig(NetClass,iris output)

2

3. Utilisation d’un perceptron sans couche cach´ee Utilisez un perceptron sans couche cach´ee pour s´eparer la classe setosa des deux autres classes. Pour cela, utilisez la commande Matlab help sur les fonctions Netlab suivantes :

glm, glmtrain et glmfwd

Partie 2 : les cartes topologiques

Nous utilisons la toolbox Matlab d´evelopp´e par l’´equipe de Kohonen.

- Allez a` : http://www.cis.hut.fi/somtoolbox/

- Cliquez sur Download

- Chargez somtoolbox2 Mar 17 2005.zip

- Faire unzip somtoolbox2 Mar 17 2005.zip

- Vous avez alors un repertoire somtoolbox contenant les fonctions du logiciel

- Charger aussi la documentation : Both PS and PDF (zipped)

Approximation de fonctions de densit´e

Donn´ees : utilisez les instructions suivantes pour g´en´erer Data1 >> n=300 >> D = rand(n,2); >> save Data1 D

Apprentissage : utilisez les donn´ees Data1 pour v´erifier visuellement si les r´ef´erents de la carte topologique obtenue par apprentissage approximent la densit´e de probabilit´e de ces donn´ees. Pour cela, ex´ecuter les instruction suivantes une a` une pour comprendre les diff´erentes ´etapes de l’apprentissage.

>> clear all >> close all >> addpath somtoolbox >> load Data1 D´efinition de la Structure des Donn´ees >> sData = som data struct(D,’name’,’donnees1’); >> %Tapez sData pour voir les diff´erents champs de cette structure >> %Tapez help som data struct pour plus de d´etails

Initialisation de la structure de la carte topologique >> msize = [6 6]; >> insize = size(sData.data,2); >> lattice = ’rect’;% ’rect’ ou ’hexa’ >> shape = ’sheet’; >> sMap = som map struct(insize,’msize’,msize, lattice, shape); Initialisation des poids de la carte topologique >> sMap = som randinit(sData, sMap); % ou sMap = som lininit(sData, sMap) Visualisation des donn´ees et de la carte initiale. >> figure >> plot(D(:,1),D(:,2),’b+’); >> hold on >> som grid(sMap,’Coord’,sMap.codebook) >> axis on >> title(’Donnees et structure de la grille’);

3

Entraˆınement de la carte : Phase 1 (Auto organisation) >> figure >> epochs = 50; >> radius ini = 5; >> radius fin = 1; >> Neigh = ’gaussian’; >> tr lev = 3; >> [sMap,sT] = som batchtrain(sMap, sData,’trainlen’,epochs, >> ’radius ini’,radius ini,’radius fin’,radius fin, ’neigh’,Neigh,’tracking’,tr lev); >> xlabel(’AUTO ORGANISATION’) >> [qe auto,te auto]=som quality(sMap,sData); >> figure >> plot(D(:,1),D(:,2),’b+’) >> hold on >> som grid(sMap,’Coord’,sMap.codebook), hold off, axis on >> title(’Apres apprentissage en 2 phases : phase auto organisation’); Entraˆınement de la carte : Phase 2 (Convergence) >> epochs = 100; >> radius ini = 1; >> radius fin = 0.1; >> figure >> [sMap,sT] = som batchtrain(sMap, sData,’trainlen’,epochs, >> ’radius ini’,radius ini,’radius fin’,radius fin, ’neigh’,Neigh,’tracking’,tr lev); >> xlabel(’CONVERGENCE’) >> [qe conv,te conv]=som quality(sMap,sData) >> figure >> plot(D(:,1),D(:,2),’b+’) >> hold on >> som grid(sMap,’Coord’,sMap.codebook), hold off, axis on >> title(’Apres apprentissage en 2 phases : phase de convergence’); >> hold on >> [Bmus, Qerrors] = som bmus(sMap, sData);

Que fait la boucle suivante? >> for neur=1:msize(1)*msize(2) >> exemples captes = find(Bmus == neur); >> plot(D(exemples captes,1),D(exemples captes,2),’r+’) >> hold on >> plot(sMap.codebook(neur,1),sMap.codebook(neur,2),’go’) >> pause >> plot(D(exemples captes,1),D(exemples captes,2),’b+’) >> plot(sMap.codebook(neur,1),sMap.codebook(neur,2),’mo’) >> end

4