RCP208_TP4

Embed Size (px)

Citation preview

Reconnaissance des Formes et Mthodes Neuronales (RCP208) e

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 1Dans cette partie, nous allons utiliser les rseaux de neurones de type perceptron multicouches e (PMC) sur un probl`me rel de classication, il sagit des Iris de Fisher. e e

Les donnes : les Iris de Fisher correspondent a 150 eurs dcrites par 4 variables quantie ` etatives : longueur du spale, largeur du spale, longueur du ptal et largeur du ptal. e e e e Les 150 eurs sont rparties en 3 direntes esp`ces : iris setosa, iris versicolor et iris virginica e e e Chaque classe est compose de 50 eurs. La classe setosa est linairement sparable des deux e e e autres, alors que versicolor et virginica ne le sont pas. Le chier iris don.mat contient les vecteurs dentre en dimension 4 dcrivant les 150 iris. Le e e chier iris cls.mat contient les classes des 150 iris. Pour lire ces chiers faire : load -ascii iris don.mat load -ascii iris cls.mat

Codage des sorties : Le codage classique des sorties dsires pour la classication utilise e eun neurone de sortie par classe, avec une valeur dsire haute pour le neurone de la classe e e correcte, et une valeur dsire faible pour les autres classes. e e Nous allons utiliser le codage suivant : classe 1 (1 0 0) classe 2 (0 1 0) classe 3 (0 0 1) Vous pouvez gnrer la matrice de sortie en utilisant les instructions Matlab suivantes : e e >> >> >> >> iris iris iris iris output=zeros(150,3); output(nd(iris cls==1),1)=1; output(nd(iris cls==2),2)=1 ; output(nd(iris cls==3),3)=1;

Rappels : cas dun PMC avec une couche cache e 1. Initialisation : dnir une architecture et initialiser les poids e Net = mlp(nin, nhidden, nout,outfunc); nin : nombre de neurones en entre. e nhidden : nombre de neurones cachs. e nout : nombre de neurones en sortie. outfunc : fonction dactivation pour la couche de sortie outfunc = linear, logistic ou softmax help mlp pour plus de dtails. e

1

2. Cycle dapprentissage [Net, options] = netopt(Net, options, x, t, alg); alg = scg ,conjgrad ou quasinew (algorithme doptimisation) help netopt pour plus de dtails.. e 3. Tester le rseau e Ycal = mlpfwd(Net, X); La fonction mlpfwd permet de calculer la sortie Ycal calcule par le rseau Net pour e e lentre X. Supposons que Yt est la sortie dsire pour lentre X. On peut alors avoir une e e e e ide de la qualit de notre apprentissage en comparant Yt ` Ycal. e e a Travail ` faire a Notre objectif est de comprendre linuence des dirents param`tres sur la qualit de lapprentissage. e e e Nous allons faire plusieurs apprentissages en faisant varier ces divers param`tres. e 1. Premi`re exprience e e Utiliser les 130 premi`res iris pour lapprentissage et les autres pour le test. e Utiliser 3 neurones cachs. e Pour un probl`me de classication, il vaut mieux utiliser des fonctions dactivation e non linaires a la couche de sortie. Utiliser la fonction softmax. e ` Faire 100 cycles dapprentissage (options(14)=100) 2. Autres expriences e Faire varier le nombre de points dans lensemble dapprentissage. Faire varier le nombre de neurones cachs. e Faire varier le nombre de cycles dapprentissage. Utiliser deux ou trois variables seulement. Pour chacune de ces experiences, valuer lerreur de classication au moyen de la matrice de confusion. e Identier les instances mal classes. e 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=nd(classe t=classe y); NetClass=zeros(150,3); NetClass(nd(classe y==1),1)=1; NetClass(nd(classe y==2),2)=1; NetClass(nd(classe y==3),3)=1; cong(NetClass,iris output)2

3. Utilisation dun perceptron sans couche cache e Utilisez un perceptron sans couche cache pour sparer la classe setosa des deux autres e e classes. Pour cela, utilisez la commande Matlab help sur les fonctions Netlab suivantes : glm, glmtrain et glmfwd

Partie 2 : les cartes topologiquesNous utilisons la toolbox Matlab dvelopp par lquipe de Kohonen. e e e Allez a : http://www.cis.hut./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 Donnes : utilisez les instructions suivantes pour gnrer Data1 e e e >> n=300 >> D = rand(n,2); >> save Data1 D Apprentissage : utilisez les donnes Data1 pour vrier visuellement si les rfrents de e e ee la carte topologique obtenue par apprentissage approximent la densit de probabilit de e e ces donnes. Pour cela, excuter les instruction suivantes une a une pour comprendre les e e ` direntes tapes de lapprentissage. e e >> clear all >> close all >> addpath somtoolbox >> load Data1 Dnition de la Structure des Donnes e e >> sData = som data struct(D,name,donnees1); >> %Tapez sData pour voir les dirents champs de cette structure e >> %Tapez help som data struct pour plus de dtails e 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 donnes et de la carte initiale. e >> gure >> 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) >> gure >> epochs = 50; >> radius ini = 5; >> radius n = 1; >> Neigh = gaussian; >> tr lev = 3; >> [sMap,sT] = som batchtrain(sMap, sData,trainlen,epochs, . . . >> radius ini,radius ini,radius n,radius n, neigh,Neigh,tracking,tr lev); >> xlabel(AUTO ORGANISATION) >> [qe auto,te auto]=som quality(sMap,sData); >> gure >> plot(D(:,1),D(:,2),b+) >> hold on >> som grid(sMap,Coord,sMap.codebook), hold o, 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 n = 0.1; >> gure >> [sMap,sT] = som batchtrain(sMap, sData,trainlen,epochs, . . . >> radius ini,radius ini,radius n,radius n, neigh,Neigh,tracking,tr lev); >> xlabel(CONVERGENCE) >> [qe conv,te conv]=som quality(sMap,sData) >> gure >> plot(D(:,1),D(:,2),b+) >> hold on >> som grid(sMap,Coord,sMap.codebook), hold o, 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 = nd(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