edu.esi.reseauxneuronaux
Class ReseauMulticouche

java.lang.Object
  |
  +--edu.esi.reseauxneuronaux.ReseauMulticouche

public class ReseauMulticouche
extends java.lang.Object

Cette classe modele un reseau neuronaux multi-couche. Vous pouvez decider tout la structure du reseau (combien des couches intermediare, combien des noeuds dans la couche d'entree/sortie/intermediares). Il utilise l'interface VecteurES (Vecteur Entree/Sortie) pour les entrees et sorties du reseau.

See Also:
VecteurES

Constructor Summary
ReseauMulticouche(int numCouches, int[] numNoeudsPerCouche, boolean ajouteNoeudDePenchant)
          Cree un nouveau reseau multi-couche avec le nombre des couche specifie.
 
Method Summary
 void forme(java.util.Vector vecteursEntree, java.util.Vector vecteursSortie, int numIterations)
          Forme le reseau avec un Vector des entrees et un Vector des sorties.
 VecteurES getOutput()
          Rend un VecteurES avec les valeurs courantes des noeuds dans la couche de la sortie.
 VecteurES reconnais(VecteurES entree)
          Applique un vecteur a la couche de l'entree et calcule la production.
 java.lang.String toString()
          Rend un String qui decrit la structure du reseau.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

ReseauMulticouche

public ReseauMulticouche(int numCouches,
                         int[] numNoeudsPerCouche,
                         boolean ajouteNoeudDePenchant)
Cree un nouveau reseau multi-couche avec le nombre des couche specifie. Le deuxieme parametre est une collection (array) de type int qui specifie combien des noeuds dans chaque couche. Le dernier parametre est si vous voulez ajouter un noeuds supplementaire pour la couche d'entree qui toujour dans l'activation aux noeuds dans les couches intermediaire. (Nous appellons ceci le noeuds de penchant (ou "bias node" en anglais). Quelque fois c'aide pour former le reseau, mais des autres fois c'a fait des choses plus complique. Je ne comprends pas exactement comment ca change les resultats, mais vous pouvez jouer avec cet parametre.

Par exemple:

 int numCouches = 3;
 int[] numNoeudsPerCouche = { 16, 4, 2 };
 ReseauMulticouche reseau = 
   new ReseauMulticouche( numCouches, numNoeudsPerCouche, false);
 
Method Detail

forme

public void forme(java.util.Vector vecteursEntree,
                  java.util.Vector vecteursSortie,
                  int numIterations)
Forme le reseau avec un Vector des entrees et un Vector des sorties.

Importante:

La fonction forme() revient apres il a fini tous les iterations, ou apres l'erreur est suffisamment petite - quand la difference entre:

(les vecteurs de la sortie nous utilisons pour former le reseau)
et
(cela qui le reseau sort quand nous appliquons une des entrees de la formation)
est moins qu'un point du percentage.

L'erreur est calculer avec une fonction du cout qui s'appelle "erreur somme - rendue carre". C'est:

Souvent, milliers des iterations sont exige pour former un grand reseau - tout depend de la structure du reseau et le nombre des des echantillons (si il y a beaucoup des enchantillons, c'est plus difficile pour ajuster les poids du reseau a accommoder tous les enchantillons). Vous pouvez mettre le nombre d'iterations a un grand nombre, parce que la fonction reviendra automatiquement quand l'erreur est suffisamment petite.

Aussi importante:

Il faut que l'element a l'index i dans les entrees correspond avec element i dans les sorties. Par exemple:

 // Remarque:
 // reseau est cadre.longuer() pour la couche de l'entree et il y a
 // seulement un noeud dans la couche de la sortie (pour cette exemple)

 // Cree un Vector avec deux entrees - un pour un cadre qui represente un
 // enchantillon positif, et le deuxieme pour un cadre qui represente un
 // enchantillon negatif.
 Vector entrees = new Vector(2);
 entrees.addElement(cadrePositif);
 entrees.addElement(cadreNegatif);

 // Cree un Vector avec deux sorties qui corresponds aux indexes pour les
 // entrees (1.0 pour la premiere positif, 0.0 pour la deuxieme negatif).
 Vector sorties = new Vector(2);
 VecteurESDouble sortie = new VectorESDouble(2);
 sortie.addElement(new Double(1.0));
 sortie.addElement(new Double(0.0));
 sorties.addElement(sortie);

 // Regarde! entrees.elementAt(0) est couple avec sorties.elementAt(0)
 // et entrees.elementAt(1) est couple avec sorties.elementAt(1)

 // Maintenant, forme le reseau avec ces Vectors pour 400 iterations
 reseau.forme(entrees, sorties, 400);
 

toString

public java.lang.String toString()
Rend un String qui decrit la structure du reseau.
Overrides:
toString in class java.lang.Object

reconnais

public VecteurES reconnais(VecteurES entree)
Applique un vecteur a la couche de l'entree et calcule la production. Alors, un VecteurES qui represente la couche de la sortie est rendu. Si il y a 2 noeuds dans la couche de la sortie, ce VecteurES va avoir une longueur de 2.

See Also:
getOutput()

getOutput

public VecteurES getOutput()
Rend un VecteurES avec les valeurs courantes des noeuds dans la couche de la sortie.

See Also:
reconnais(VecteurES)