Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

TP 2015

Télécharger au format docx, pdf ou txt
Télécharger au format docx, pdf ou txt
Vous êtes sur la page 1sur 13

MASTER C2I2S RESEAUX DE NEURONES

TP de familiarisation avec la toolbox des


réseaux de neurones « NNET »
Rapport
Avant la fin de la séance, vous devrez remettre :
% Commentaires sur le bon ou le mauvais fonctionnement ...
% Comparaison des sorties du réseau de neurones avec le vecteur à trouver.
%Une brève critique sur l'approche utilisée

Partie I : Le fonctionnement d'un neurone avec NND


A ) Dans la fenêtre de commande de Matlab exécuter la commande suivante : nnd2n1

On vous demande de modifier les valeurs du poids w et du biais d’entrée (bias input)
b et de visualiser l'effet du stimulus sur la réponse. N’oublier de décrire ce que vous
observez.

B) Dans la fenêtre de commande de Matlab exécuter la commande suivante : nnd2n2

On vous demande de modifier les valeurs des entrées p(1) et p(2), du poids w et du
biais d’entrée (bias input) b et de visualiser l'effet du stimulus sur la réponse.
N’oublier de décrire ce que vous observez.

Partie II : Utilisation de l’interface graphique « Neural Network


Fitting Tool »
Dans la fenêtre de commande de Matlab exécuter les commandes suivantes :
 load housing % Charger les données
 nftool
 Appuyer sur « Next » pour continuer, ensuite sélectionner p et t des menus
déroulants
 Vous allez remarquer que les entrées et les cibles sont déjà assignées pour un
intervalle de [-1,1].
 Appuyer sur « Next » pour continuer, vous allez remarquer que «validation »
et «test data sets » sont à 20% de la valeur des données d’origine.
 Appuyer sur « Next » pour continuer, vous allez remarquer que le nombre des
neurones cachés est de 20, vous pourrez le changer plus tard.
 Une fois que le réseau est créé, appuyer sur « Train » pour réaliser
l’apprentissage.
 Cette fois l’apprentissage a pris 20 itérations
 Appuyer sur « View Regression » dans la fenêtre de « Neural Network Fitting
Tool »

Le même résultat peut être obtenu en utilisant les commandes suivantes

% Create Network
clear all
load housing

2015/2016 Page 1
MASTER C2I2S RESEAUX DE NEURONES

inputs=p;targets=t
numHiddenNeurons = 20;
net = newfit(inputs,targets,numHiddenNeurons);
net.divideParam.trainRatio = 60/100;
net.divideParam.valRatio = 20/100;
net.divideParam.testRatio = 20/100;

% Train and Apply Network


[net,tr] = train(net,inputs,targets);
outputs = sim(net,inputs);

% Plot
plotperf(tr)
plotregression(targets,outputs)
figure
plot(outputs,'.')
hold on
plot(targets,'o')

Pour plus de détails vous pouvez consulter l’aide de Matlab la section suivante :
« Using Command-Line Functions : Getting Started (Neural Network Toolbox)»

 Appuyer sur « Next » dans la fenêtre de « Neural Network Fitting Tool » pour
évaluer le réseau.
 Si vous êtes satisfait, appuyer sur « Next » pour sauvegarder le réseau. Ensuite
appuyer sur « Finish » pour terminer.

Partie III : Utilisation de l’interface graphique « Neural Network


Tool »

Exemple : Création d’un Perceptron pour implémenter la fonction ET

Dans la fenêtre de commande de Matlab taper la commande:


nntool
Ensuite exécuter les commandes suivantes :
Appuyer sur “New”,
Sélectionner “ Data”.
Taper p dans “ Name”, et [0 0 1 1;0 1 0 1] dans “Value”, et cocher «Inputs » dans
“ Data Type”
Appuyer sur “ Create “ puis sur “ OK “

Taper t dans “ Name”, et [0 0 0 1] dans “Value”, et cocher «Target » dans “ Data


Type”
Appuyer sur “ Create “ puis sur “ OK “.

Sélectionner “Network”. Taper netET dans “Name”. Sélectionner dans Perceptron


“Network Type”.
Sélectionner comme entrées p, et comme sorties cibles t.

Appuyer sur «View» pour voir le perceptron.


Appuyer sur « Create » et « OK » pour créer le perceptron.

2015/2016 Page 2
MASTER C2I2S RESEAUX DE NEURONES

Pour entraîner le perceptron :


Sélectionner netET.
Appuyer sur ”Open”.
Appuyer sur “Training Info”
Dans « Training Data », sélectionner p dans « Inputs » et t dans « Targets »
Appuyer sur “ Train Network” pour apprendre le perceptron.

Pour simuler le perceptron aller dans “Simulate” choisir p comme entrées dans
“Inputs”
Appuyer sur « Simulate Network” ensuite sur OK.

On peut exporter les résultats dans le Workspace appuyer sur « Export ».


Pour voir par exemple les poids et biais taper les commandes :
netET.iw{1,1}
netET.b{1}

Partie IV: Création simulation de RNA avec Matlab


L’objectif de cette partie est d’utiliser l’approche matricielle pour la simulation des
réseaux de neurones avec Matlab.

I. Cas d’un réseau à une seule couche


1- cas de modèle statique
a. Cas d’une seule sortie :
La figure suivante présente le fonctionnement d'un neurone. Il s'agit d'une unité
faisant la somme pondérée des signaux reçus en entrée noté p à laquelle on applique
une fonction de transfertafin d'obtenir la réponse de la cellule (notée a).

Exécuter les commandes suivantes (consulter l’aide de Matlab pour la commande


newlin , la fonction de transfert est linéaire,)

Exemple de 2 entrées :

P=[1 3 ; 1 3];
net = newlin(P,1);
net.IW{1,1}
net.b{1}
% W = [1 2];
net.IW{1,1}=[1 2];
% b = [0];
net.b{1}=0;

2015/2016 Page 3
MASTER C2I2S RESEAUX DE NEURONES

P = [1 2 2 3;2 1 3 1];
A = sim(net,P)

b. Cas de plusieurs sorties

Exemple de 2 entrées 2 sorties :

P = [1 2 2 3;2 1 3 1];
net = newlin(P,2);
net.IW{1,1}
net.b{1}
net.IW{1,1}=[1 2;10 10];
net.b{1}=[0;0];
A = sim(net,P) %A =

2- Cas de modèle dynamique

De manière générale 𝑎(𝑡) = 𝑊1,1 𝑝(𝑡) + 𝑊1,2 𝑝(𝑡 − 1)+ ⋯ + 𝑊1,𝑁 𝑝(𝑡 − 𝑁)
𝑊 = [𝑊1,1 𝑝(𝑡) 𝑊1,2 … 𝑊1,𝑁 ]

Exemple d’une entrée retardée de N pas


On considère la séquence d’entrée suivante :

p1 = [1], p2 = [1], p3 = [1], p4 = [1]

2015/2016 Page 4
MASTER C2I2S RESEAUX DE NEURONES

%Réseau sans retard


P = [1 1 1 1]
net = newlin(P,1);
net.b{1}=0;
net.IW{1,1} = 1;
A = sim(net,P)
%
%Réseau avec retard
La séquence d’entrée sera présentée au réseau comme suit : P = {1 1 1 1} ou en
utilisant la commande P=con2seq(P)
P=con2seq(P);

Cas où N=1
net = newlin(P,1,[0 1]);
net.b{1}=0;
net.IW{1,1} = [1 1];
A = sim(net,P)

Cas où N=2
net = newlin(P,1,[0 :2]);
net.b{1}=0;
net.IW{1,1} = [1 1 1];
A = sim(net,P)

Exemple de deux entrées retardées d’un pas:

𝟏 𝟏 𝟏 𝟏
𝐏𝟏 = [ ] 𝐏𝟐 = [ ] 𝐏𝟑 = [ ] 𝐏𝟒 = [ ]
𝟏 𝟐 𝟑 𝟒

P = [1 1 1 1; 1 2 3 4 ];
P=con2seq(P)% = {[1; 1] [1; 2] [1; 3] [1; 4]};
net = newlin(P,1,[0 1]);
net.b{1}=0;
net.IW{1,1} = [1 2 10 20];
A = sim(net,P)

II. Cas d’un réseau multicouche


1- Cas de modèle statique
Pour créer un réseau multicouche statique, on utilise la commande newff

Exemple : réseau à une seule couche cachée

P = [0 1 2 3; 4 5 6 7 ];
T = [0 1 2 3; 4 3 2 1; 5 2 3 4];
net = newff(P,T,4);
net.layers{1}.transferFcn

2015/2016 Page 5
MASTER C2I2S RESEAUX DE NEURONES

net.layers{2}.transferFcn
B1=net.b{1};
W1= net.IW{1,1} ;
W2= net.LW{2,1};
B2= net.b{2};
Y = sim(net,P);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
net.b{1}=zeros(4,1) ;
net.IW{1,1}=ones(4,2) ;
net.LW{2,1}= ones(3,4) ;
net.b{2}= zeros(3,1);
Y = sim(net,P)

Pour un réseau à une seule couche cachée, par défaut les fonctions d’activation sont la
tangente hyperbolique pour la couche cachée et fonction identité pour celle de sortie.

Exemple : réseau à 2 couches cachées

P = [0 1 2 3 4; 0 5 6 7 8 ];
T = [2 1 2 3 4];
net = newff(P,T,[4 3],{'logsig' 'tansig'});

net.layers{1}.transferFcn
net.layers{2}.transferFcn
net.layers{3}.transferFcn
B1=net.b{1};
W1= net.IW{1,1} ;
W2= net.LW{2,1};
B2= net.b{2};
Y = sim(net,P);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
net.IW{1,1}=ones(4,2);
net.LW{2,1}=ones(3,4);
net.biasConnect = [ 0 ;0;0];
Y = sim(net,P)
net.b{1};
net.b{2};
net.b{3};

2- Cas de modèle dynamique


a. Les réseaux FTDNN
Ils sont appelés focused time-delay neural network et sont utilisés pour approximer
des modèles dynamiques du type :

y( t )  f u(t) , u(t - 1),, u(t - N)


2015/2016 Page 6
MASTER C2I2S RESEAUX DE NEURONES

Pour créer ce type de réseau on utilise la commande newfftd. Elle est similaire à
newff avec un argument d’entrée de plus fixant le nombre de lignes de retard.

Exemple :
load dyndata1
y = con2seq(y);
u = con2seq(u);

nu=2;
p = u(nu+1:end);
t = y(nu+1:end);

%creer un réseau FTDNN en utilisant la commande newfftd.


ftdnn_net = newfftd(p,t,[1:nu],5);

Pi=u(1:nu); %définir les conditions initiales

simuler le reseau et calculer l’erreur de prédiction


yp = sim(ftdnn_net,p,Pi);
W1= ftdnn _net.IW{1,1}
B1= ftdnn_net.b{1}
W2 ftdnn_net.LW{2,1}
B2= ftdnn_net.b{2}

yp = cell2mat(yp);
e = yp-cell2mat(t);
rmse = sqrt(mse(e))

b. Les réseaux NARX


Ils sont appelés Neural AutoRegressive with eXogenous variable et sont utilisés pour
approximer des modèles dynamiques du type :

y( t )  f u(t) , u(t - 1),, u(t - Nu ), y(t - 1), y(t - 2),, y(t - N y ) 

2015/2016 Page 7
MASTER C2I2S RESEAUX DE NEURONES

Ils deux types de modèles :



modèle série parallèle : ŷ( t )  f u(t) , u(t - 1),, u(t - Nu ), y(t - 1), y(t - 2),, y(t - N y ) 


ŷ( t )  f u(t) , u(t - 1),, u(t - Nu ), ˆy(t - 1), ˆy(t - 2),, ˆy(t - N y ) 

modèle parallèle :


ŷ( t )  f u(t) , u(t - 1),, u(t - Nu ), y(t - 1), y(t - 2),, y(t - N y ) 

Pour créer un modèle série parallèle, on utilise la commande newnarxsp

Exemple :
load dyndata2
y = con2seq(y);
u = con2seq(u);
nu=3;ny=3;

p = u(nu+1:end);
t = y(ny+1:end);
d1 = [1:nu];
d2 = [1:nu];
%creer un réseau FTDNN en utilisant la commande newarxsp.

narx_net = newnarxsp(p,t,d1,d2,5);
narx_net.layers{1}.transferFcn
narx_net.layers{2}.transferFcn
B1=narx_net.b{1}
W1= [narx_net.IW{1,1}; narx_net.IW{1,2}]
W2= narx_net.LW{2,1}

2015/2016 Page 8
MASTER C2I2S RESEAUX DE NEURONES

B2= narx_net.b{2}

%simuler le reseau

Pi = [u(1:nu); y(1:ny)];
yp = sim(narx_net,[p;t],Pi);
plot(cell2mat(yp),'.r')
hold on
plot(cell2mat(t),'o')

Partie V: Apprentissage supervisé de RNA avec Matlab

I. Simulations des données.


Ecrire les commandes suivantes dans un fichier script donnees.m
n=300; X=4*(rand(1,n)-.5); %X=sort(X);
a=2; b=5; Y=a*X + b; Yb=Y+.2*randn(size(Y));
plot(X,Y,'b.',X,Yb,'ro')
save data1 X Y Yb
Y=zeros(size(X));
Y=Y+sin(pi*X).*((X>-1) & (X<1));
Yb=Y+.2*(randn(size(Y))-0.1);
figure
plot(X,Y,'b.',X,Yb,'ro')
save data2 X Y Yb

Exécuter le fichier donnees


II. Apprentissage d'un réseau sans couche cachée
1) Cas statique
Ecrire les commandes suivantes dans un fichier script test1.m
clear all
close all
load data1
net=newlin(X,Y);
Ysim = sim(net,X);
plot(X,Y,'b-',X,Ysim,'r.')
B=net.b{1}
W=net.IW{1,1}

net = train(net,X,Y);
B=net.b{1}
W= net.IW{1,1}
Ysim = sim(net,X);
erreur=Ysim-Y;
plot(X,Y,'.k',X,Ysim,'or',X,erreur)
Exécuter le fichier test1.m
1) Comparer W et B respectivement avec le coefficient directeur a et l'ordonnée à
l'origine b avant et après l’apprentissage.
2) Réinitialiser le poids et le biais aléatoirement
net.b{1}=rand;
net.IW{1,1}=rand;
3) Faire varier le taux d'apprentissage 0.1 , 0.01 , 0.001

2015/2016 Page 9
MASTER C2I2S RESEAUX DE NEURONES

net.inputWeights{1,1}.learnParam.lr=;
net.biases{1,1}.learnParam.lr=;
4) Faire varier la valeur minimale du critère : 0.1, 0.001

net.trainParam.goal =;
3) Faire varier le nombre de cycles d'apprentissage 10, 100

net.trainParam.epochs =
4) Remplacer la variable cible Y par celle bruitée Yb et refaire la même étude
5) Utiliser data2 à la place de data1 et Faire varier les paramètres d'apprentissage.
2) Cas dynamique

Pi = {1};
P = {2 3 4};
T = {3 5 6};
net = newlin(P,T,[0 1],0.02);
net.IW{1,1} = [0 0];
net.biasConnect = 0;
net = train(net,P,T,Pi);
A=sim(net,P,Pi)
e=cell2mat(T)-cell2mat(A)
net.IW{1,1}

1) Faire varier le nombre de cycles d’apprentissage 10, 100 ,100

net.trainParam.epochs = ;
2) Par défaut, la fonction train.m utilise l’algorithme d’apprentissage bach
net.trainFcn='trainb' utilisant Levenberg-Marquardt backpropagation. Tester
l’algorithme d'apprentissage utilisant la technique de régularisation des poids

 net.trainFcn = 'trainbr';

III. Apprentissage d'un réseau multicouche statique


Ecrire les commandes suivantes dans un fichier script test2.m (copier test1.m dans
test2.m puis modifier test2.m).
clear all
close all
load data2

net=newff(X,Y,1,{'logsig','purelin'});
Ysim = sim(net,X);
plot(X,Yb,'b-',X,Ysim,'r.')

Ysim = sim(net,X);

%modifier ici si nécessaire les paramètres du réseau

net = train(net,X,Y);

Ysim = sim(net,X);

2015/2016 Page 10
MASTER C2I2S RESEAUX DE NEURONES

erreur=Ysim-Y;
plot(X,Y,'.k',X,Ysim,'or',X,erreur)

1) Exécuter test2.m
2) Faire varier le nombre de couches cachée 5, 10 et 25
3) Reprendre la question 2 en faisant varier la taille des différentes bases
d'apprentissage, de validation et de test
net.divideParam.trainRatio = 60/100;
net.divideParam.valRatio = 20/100;
net.divideParam.testRatio = 20/100;
4) Faire varier le nombre de cycles d'apprentissage
net.trainParam.epochs = ;

5) Par défaut, la fonction train.m utilise l’algorithme de Levenberg-Marquardt


backpropagation (%net.trainFcn='trainlm')

Tester les autres algorithmes d'apprentissage


- gradient 'traingd ',
-gradient avec momentum 'traingdm ';
en faisant varier le taux d’apprentissage %net.trainParam.lr = et le terme
momentum %net.trainParam.mc =;

IV. Apprentissage d'un réseau multicouche dynamique :


1) Les réseaux FTDNN
Reprendre l’exemple du paragraphe Les réseaux FTDNN et comme suite du
programme, taper les commandes suivantes :

Pi=y(1:nu);
ftdnn_net = train(ftdnn_net,p,t,Pi);
W1= ftdnn_net.IW{1,1};

yp = sim(ftdnn_net,p,Pi);
yp = cell2mat(yp);
e = yp-cell2mat(t);
rmse = sqrt(mse(e))

figure
plot(yp,'b.');
hold on
plot(cell2mat(t),'go')

2) Les réseaux NARX


Reprendre l’exemple du paragraphe Les réseaux NARX et comme suite du
programme, taper les commandes suivantes :
Pi = [u(1:nu); y(1:ny)];
narx_net = train(narx_net,[p;t],t,Pi);

yp = sim(narx_net,[p;t],Pi);
B1=narx_net.b{1}

2015/2016 Page 11
MASTER C2I2S RESEAUX DE NEURONES

W1= [narx_net.IW{1,1}; narx_net.IW{1,2}]


W2= narx_net.LW{2,1}
B2= narx_net.b{2}

e = cell2mat(yp)-cell2mat(t);
plot(e)
figure
plot(cell2mat(yp),'b');
hold on
plot(cell2mat(t),'g')

V. Autres exemples d’application :


Execice1 :
Ecrire les commandes suivantes dans un fichier script test3.m
p = [0 1 2 3 4 5 6 7 8];
t = [0 0.84 0.91 0.14 -0.77 -0.96 -0.28 0.66 0.99];
net = newff(minmax(p),t,25,{'logsig','purelin'});
y1 = sim(net,p)
plot(p,t,'o',p,y1,'x')

net = train(net,p,t);
y2 = sim(net,p);

p1=0:0.1:8;
y3 = sim(net,p1);
plot(p,t,'o',p,y2,'*',p1,y3,'-')

1) Exécuter test3.m
2) Faire varier le nombre de neurones de la couches cachée ( 1, 5,10,20). Commenter
3) Reprendre la question 2 pour deux couches cachées.
net = newff(p,t,[nc1 nc2],{'logsig','logsig','purelin'});
Commenter
3) Pour une seule couche cachée et un nombre de neurones convenable, Faire varier
la taille des différentes bases d'apprentissage, de validation et de test. Commenter
4) Faire varier le nombre de cycles d'apprentissage 10, 100 et 1000
net.trainParam.epochs =;
Commenter
5) Faire varier la valeur minimale du critère 0.01, 1e-4 et 1e-10
net.trainParam.goal = ;
Commenter

Exercice2 :
Réaliser l’entraînement de réseaux multicouches permettant d’estimer les modèles
suivants :

2015/2016 Page 12
MASTER C2I2S RESEAUX DE NEURONES

1. Approximation de fonction: fichier de données :


ŷ = 𝑓(𝑥) dataapproxi.mat

2. Problème de prédiction : fichier de données :


ŷ(t) = 𝑓(𝑦(𝑡 − 1), 𝑦(𝑡 − 2), … , 𝑦(𝑡 − 𝑛)) dataestima.mat

3. Problème d’identification d’un modèle dynamique : fichier de données :


ŷ(t) = 𝑓(𝑢(𝑡 − 1), … , 𝑢(𝑡 − 𝑛𝑢), 𝑦(𝑡 − 1), … , 𝑦(𝑡 − 𝑛𝑦)) dataident.mat

2015/2016 Page 13

Vous aimerez peut-être aussi