From cfab1204e9830b6b3bf85c230278555c2d51e2b6 Mon Sep 17 00:00:00 2001 From: Felix Maurin Date: Tue, 17 Dec 2019 00:33:40 +0100 Subject: [PATCH] ajout du perceptron multicouches (1) --- learning/code/PMC_training.m | 29 +++++++++++++++++++++++++++++ learning/code/learning.m | 27 ++++++++++++++++++++++++++- 2 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 learning/code/PMC_training.m diff --git a/learning/code/PMC_training.m b/learning/code/PMC_training.m new file mode 100644 index 0000000..699aecb --- /dev/null +++ b/learning/code/PMC_training.m @@ -0,0 +1,29 @@ +function [net, rt, errort, perft] = PMC_training(entree, sortie, n_cache, nb_apprentissage) + +[n_entree, nb_echantillons] = size(entree); +[n_sortie, ~] = size(sortie); + +% net = newff(entree, sortie, n_cache, {'tansig' 'tansig'}, 'trainscg'); +net = feedforwardnet(n_cache, 'trainscg'); + +net.trainParam.epochs = 1000; % Le nombre de cycle d’apprentissage est fixé à 1000 + +net.trainParam.lr = 0.02; % Le pas d’apprentissage est égal à 0.02 + +net.trainParam.show = 100; % Des informations sur les performances du réseau sont affichées tous les 100 cycles d’apprentissage + +net.trainParam.goal = 1e-10; % L’algorithme d’apprentissage s’arrête lorsque l’erreur quadratique moyenne est inférieure à 1e-10 + +net.trainParam.min_grad = 1e-10; % L’algorithme d’apprentissage s’arrête lorsque le module du gradient est inférieur à 1e-10 + +net.divideParam.trainRatio = nb_apprentissage / nb_echantillons; +net.divideParam.valRatio = 0; % On n'utilise pas d'ensemble de validation. +net.divideParam.testRatio = (nb_echantillons - nb_apprentissage) / nb_echantillons; + +net = train(net, entree, sortie); + +entree_test = entree((nb_apprentissage + 1): nb_echantillons,:); +sortie_test = sortie((nb_apprentissage + 1): nb_echantillons,:); +[rt, pf, af, errort, perft] = sim(net, entree_test, [], [], sortie_test); +end + diff --git a/learning/code/learning.m b/learning/code/learning.m index a4f5ac1..41b853f 100644 --- a/learning/code/learning.m +++ b/learning/code/learning.m @@ -13,6 +13,25 @@ dataset_size = length(dataset); vecteurs=zeros(2*(cmax-cmin+1),dataset_size); %TODO: renommer en vectors +classes = []; %colonne [avance; arret; gauche; droite; rejet] + +for k=1:dataset_size %instanciation des valeurs des classes pour le training + deb = dataset(k).name(1:2); + if deb == 'av' + classes = [classes , [1;0;0;0;0]]; + elseif deb == 'ar' + classes = [classes , [0;1;0;0;0]]; + elseif deb == 'ga' + classes = [classes , [0;0;1;0;0]]; + elseif deb == 'dr' + classes = [classes , [0;0;0;1;0]]; + elseif deb == 're' + classes = [classes , [0;0;0;0;1]]; + end +end + + + % c'est lent % s'assurer que l'on choisit toutes les images % @@ -55,4 +74,10 @@ for n=1:n_classes axis equal axis ij drawnow -end \ No newline at end of file +end + +% utilisation de l'algorithme du perceptron multicouches + +[net, resultats_test, ecarts, erreur] = PMC_training(vecteurs, classes, 10, 900); + +