Admin Admin
Nombre de messages : 418 Date d'inscription : 27/09/2005
| Sujet: Devoir à rendre le 15 janvier 2006 Sam 5 Nov à 17:40 | |
| | |
|
Admin Admin
Nombre de messages : 418 Date d'inscription : 27/09/2005
| Sujet: Re: Devoir à rendre le 15 janvier 2006 Jeu 8 Déc à 12:55 | |
| | |
|
Admin Admin
Nombre de messages : 418 Date d'inscription : 27/09/2005
| Sujet: Re: Devoir à rendre le 15 janvier 2006 Mar 10 Jan à 13:00 | |
|
Dernière édition par le Mar 17 Jan à 17:55, édité 9 fois | |
|
Admin Admin
Nombre de messages : 418 Date d'inscription : 27/09/2005
| Sujet: Re: Devoir à rendre le 15 janvier 2006 Mar 10 Jan à 14:04 | |
| #Generation de la fonction f(x) avec affichage
k=(-100:100); x=k/100;
fx=0.5*sin(pi*x);
plot(x,fx,pch=19, col='cyan')
#################################################### #################################################### #initialisation w=matrix(runif(4,-1,1),2,2); #matrice de poids w0=w; #sauvegarde des conditions initiales (poids) tmax=20; #nb d'iterations de l'algorithme d'apprentissage:tmax*N alpha=0.1; #gain d'apprentissage #tracew=matrix(rep(0,N*tmax*p),N*tmax,p); #tracabilite de l'evolution des poids
##fonction de transfert couche cachée a valeurs sur [0,1] phi=function(x) (1+tanh(x))/2; ##derivee de la fonction de transfert couche cachée phi_prime=function(x) (1-tanh(x)^2)
# X : base d'entree # Y : base de sortie # n1 : nb de neurones couche cachee # num_reseau : numero d'identification du reseau init_algo=function(X,Y,n1,num_reseau) | |
|
Admin Admin
Nombre de messages : 418 Date d'inscription : 27/09/2005
| Sujet: Re: Devoir à rendre le 15 janvier 2006 Jeu 12 Jan à 21:04 | |
| 0.7*cos (3*pi*x/2+pi/6) 0.5*sin(pi*x) - Code:
-
rm(list=ls()) ######################################################################## ############Initialisation########## ######################################################################## # Base d'apprentissage # n cellules en entree et sortie, m cellules intermediaires k=-100:100; x=k/100; fx=0.5*sin(pi*x); #fx=0.7*cos (3*pi*x/2+pi/6); #fx=abs(x)-0.5; n=length(k); m=2; alpha=0.9; #parametre d'apprentissage seuil=0.01;#on peut prendre un seuil tres petit erreur=100
#initialisation aleatoire des poids reliant a la couche intermediaire wEI=matrix(runif(m*n,-1,1),n,m); wIS=matrix(runif(m*n,-1,1),m,n);
#initialisation des activités (aS et aI), des potentiels (vS et vI) #des cellules intermediaires et de sortie (sous forme de vecteurs) aI=rep(0,m); vI=rep(0,m); aS=rep(0,n); vS=rep(0,n);
#initialisation des variables utiles pour la modification des poids #lors de la rétropopagation (les "deltas") deltawS=matrix(rep(0,m*n),n,m); deltawI=matrix(rep(0,m*n),n,m); deltaS=matrix(rep(0,n),n,1); deltaI=matrix(rep(0,m),m,1);
# fonction sigmoide on prend ici une pas forcement positive phi<-function(y){ y<-tanh(y); }
#dérivée de la fonction sigmoide dphi<-function(y){ y <- 1-tanh(y)^2; }
######################################################################## #######Algorithme d'apprentissage####### ######################################################################## while (erreur>seuil){ #les potentiels intermédiaires for (i in 1:m){ vI[i]=sum(wEI[,i]*x); };
#les activites intermédiaires for (i in 1:m){ aI[i]=phi(vI[i]); }
#les potentiels de sortie for (i in 1:n){ vS[i]=sum(wIS[,i]*aI); };
#les activites de sortie (correspond "aux y") for(i in 1:n){ aS[i]=phi(vS[i]); };
#calcul de l'erreur residuelle erreur=0.5*sum((fx-aS)^2);
#calcul du terme de gradient d'erreur sur la derniere couche for(i in 1:n){ deltaS[i]=dphi(vS[i])*(aS[i]-fx[i]); };
#retropropagation de ce terme de gradient sur la couche intermediaire for(i in 1:m){ deltaI[i]=dphi(vI[i])*sum(wIS[i,]*deltaS); };
#mise a jour des poids du reseau wIS=wIS-alpha*t(deltaS%*%aI); wEI=wEI-alpha*t(deltaI%*%t(x)); };
######################################################################## #######Representation de la retropropagation####### ######################################################################## plot(x,fx,xlim=c(-1,1),ylim=c(-0.8,0.8), ylab="f(x)", type="l", col='red',lwd=3, main="Simulation de f(x)=0.7 cos (3*pi x/2 + pi/6) par l'algorithme de retro-propagation"); points(x,aS,col='black');
| |
|
Contenu sponsorisé
| Sujet: Re: Devoir à rendre le 15 janvier 2006 | |
| |
|