TP 2015
TP 2015
TP 2015
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.
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.
% 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;
% 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.
2015/2016 Page 2
MASTER C2I2S RESEAUX DE NEURONES
Pour simuler le perceptron aller dans “Simulate” choisir p comme entrées dans
“Inputs”
Appuyer sur « Simulate Network” ensuite sur OK.
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)
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 =
De manière générale 𝑎(𝑡) = 𝑊1,1 𝑝(𝑡) + 𝑊1,2 𝑝(𝑡 − 1)+ ⋯ + 𝑊1,𝑁 𝑝(𝑡 − 𝑁)
𝑊 = [𝑊1,1 𝑝(𝑡) 𝑊1,2 … 𝑊1,𝑁 ]
2015/2016 Page 4
MASTER C2I2S RESEAUX DE NEURONES
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)
𝟏 𝟏 𝟏 𝟏
𝐏𝟏 = [ ] 𝐏𝟐 = [ ] 𝐏𝟑 = [ ] 𝐏𝟒 = [ ]
𝟏 𝟐 𝟑 𝟒
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)
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.
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};
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);
yp = cell2mat(yp);
e = yp-cell2mat(t);
rmse = sqrt(mse(e))
2015/2016 Page 7
MASTER C2I2S RESEAUX DE NEURONES
ŷ( 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 )
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')
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}
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';
net=newff(X,Y,1,{'logsig','purelin'});
Ysim = sim(net,X);
plot(X,Yb,'b-',X,Ysim,'r.')
Ysim = sim(net,X);
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 = ;
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')
yp = sim(narx_net,[p;t],Pi);
B1=narx_net.b{1}
2015/2016 Page 11
MASTER C2I2S RESEAUX DE NEURONES
e = cell2mat(yp)-cell2mat(t);
plot(e)
figure
plot(cell2mat(yp),'b');
hold on
plot(cell2mat(t),'g')
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
2015/2016 Page 13