Neuron: neural networks


mlp< T, U > Class Template Reference

Perceptron Multi-couches : classe mlp. More...

#include <neur/mlp/mlp.h>

Inheritance diagram for mlp< T, U >:
Collaboration diagram for mlp< T, U >:

Public Member Functions

Constructeurs - Destructeur
 mlp ()
 Réseau vide.
 
 mlp (const char *nom, int nc, int *couch)
 Couches initialisées.
 
 mlp (const mlp< T, U > &pmc)
 
virtual ~mlp ()
 
mlp< T, U > & operator= (const mlp< T, U > &pmc)
 
Fonctions
virtual void init (const char *nom, int nc, int *couch)
 Initialisation du réseau.
 
virtual void empty ()
 Vidange du réseau.
 
virtual void aff () const
 Affichage du contenu du réseau.
 
virtual void add_neur (const char *nom, int c, T bia, T sor)
 Ajout d'un neurone.
 
virtual int del_neur (int c, int no)
 Elimination d'un neurone.
 
virtual int add_link (int c, int tar, int nli)
 Ajout d'une liaison.
 
virtual int add_link (int c, int tar)
 Ajout d'une liaison.
 
virtual int del_link (int c, int no)
 Elimination d'une liaison.
 
virtual int add_le (int c, int tar, int co, int org, U w)
 Ajoute un lien élémentaire.
 
virtual int del_le (int c, int tar, int co, int org)
 Elimination d'un lien élémentaire.
 
int get_neur (int c, int n)
 Numéro d'un neurone.
 
int get_link (int c, int n)
 Numéro de liaison.
 
virtual int trie ()
 Trie du réseau.
 
virtual int load (const char *nom)
 Charge le réseau.
 
virtual int load (std::istream &fich)
 Charge le réseau à partir d'un stream déja ouvert.
 
virtual int prop (const pat< T > &pa, int n)
 Fait fonctionner le réseau.
 
virtual int prop ()
 Propage les valeurs d'entrées (préalablemet positionnées)
 
virtual int backprop (const pat< T > &pa, int nc, double eta, int flg=0, T *err=NULL)
 Apprentissage.
 
virtual T backprop (T *learnO, double eta)
 Apprentissage, 1 passe, à partir d'un état déjà propagé.
 
virtual void ReductionIndex (int j)
 Fait la réduction pour 1 neurone donné, j-ème de la couche cachée.
 
virtual void Reduction ()
 Réduit pour un PMC à 3 couches.
 
- Public Member Functions inherited from net< T, U >
 net ()
 Réseau vide.
 
 net (const char *nom, int nu, int nl, int nac, int ni, int no, int fo, int *tar, int *nli, int **ori)
 Réseau initialisé.
 
 net (const char *nom, int nc, int *couch)
 Réseau à couches.
 
 net (const char *nom)
 Lit un réseau dans un fichier.
 
 net (const net< T, U > &n)
 Constructeur de copie.
 
virtual ~net ()
 Destructeur.
 
net< T, U > & operator= (const net< T, U > &n)
 Copie.
 
net< T, U > operator+ (const unit< T > &u)
 Ajout d'un neurone.
 
net< T, U > operator+ (const neur_link< U > &l)
 Ajout d'une connexion.
 
net< T, U > operator- (const unit< T > &u)
 Suppression d'un neurone.
 
net< T, U > & operator* (const net< T, U > &le)
 
net< T, U > & operator/ (const net< T, U > &le)
 
net< T, U > & operator^ (const net< T, U > &le)
 
net< T, U > & operator+= (const unit< T > &n)
 Ajout d'un neurone.
 
net< T, U > & operator+= (const neur_link< U > &l)
 Ajout d'une connexion.
 
net< T, U > & operator-= (const unit< T > &n)
 Suppression d'un neurone.
 
const char * nm () const
 Nom du réseau.
 
int nu () const
 Nombre d'unités.
 
int nl () const
 Nombre total de liens élémentaires.
 
int nac () const
 Nombre d'arrivées de connexion (neur_links)
 
int ni () const
 Nombre d'entrées.
 
int no () const
 Nombre de sorties.
 
int fo () const
 Numéro de la 1ère unité de sortie.
 
unit< T > * u () const
 Tableau des unités du réseau.
 
neur_link< U > * l () const
 Tableau des liaisons.
 
virtual void init (const char *nom, int nu, int nl, int nac, int ni, int no, int fo, int *tar, int *nli, int **ori)
 Initialisation du réseau.
 
virtual void add_neur (const char *nom, int typ, int xx, int yy, int zz, T bia, T sor)
 Ajout d'un neurone.
 
virtual int del_neur (int no)
 Elimination d'un neurone.
 
virtual int del_link (int no)
 Elimination d'une liaison.
 
virtual int add_le (int tar, int org, U w)
 Ajout d'un lien élémentaire.
 
virtual int del_le (int tar, int org)
 Elimine un lien élémentaire.
 
virtual void pmc (const char *nom, int nc, int *couch)
 Initialise un Perceptron-Multi-Couches.
 
virtual int save (const char *nom) const
 Sauve le réseau sur disque.
 
virtual int save (std::ostream &fich) const
 Ecriture dans un stream déja ouvert.
 
virtual int get_neur (const unit< T > &u)
 Renvoie le numéro d'un neurone.
 
virtual int get_link (int tar)
 Recherche d'une liaison.
 
virtual void rand_w (U min, U max)
 Initialisation des poids.
 
virtual int backprop (const pat< U > &pa, int nc, double eta, int flg=0, T *err=NULL)
 Apprentissage.
 
virtual void learn (int n, T dlt, double eta)
 Apprentissage d'une liaison.
 
virtual int nlink (int ta)
 Nombre de liens.
 
virtual void af_out (int fl=1) const
 Affiche les sorties du reseau.
 
virtual int bytesize () const
 Calcule la taille du fichier de sauvegarde.
 

Accès aux membres

int _nc
 Nombre de couches.
 
int * _couch
 Tableau des nombres de neurones par couche.
 
int nc () const
 Nombre de couches.
 
int * couch () const
 Tableau des nombres de neurones sur chaque couche.
 

Additional Inherited Members

virtual T learn_p (int ta, T dlt, double eta)
 Apprentissage des poids d'une liaison.
 
virtual int renum (int org, int ta)
 Réordonnancement du réseau.
 
- Protected Attributes inherited from net< T, U >
char _nm [20]
 Nom du réseau.
 
int _nu
 Nombre d'unités (de neurones)
 
int _nl
 Nombre de connexions.
 
int _nac
 Nombre d'arrivées de connexions.
 
int _ni
 Nombre d'entrées.
 
int _no
 Nombre de sorties.
 
int _fo
 Numéro de la 1ère sortie.
 
unit< T > * _u
 Tableau des neurones.
 
neur_link< U > * _l
 Tableau des connexions.
 

Detailed Description

template<class T, class U>
class mlp< T, U >

Perceptron Multi-couches : classe mlp.

\ \ template<class T, class U> class mlp : public net<T,U> \ \ Une classe dérivée de net se spécialise dans les perceptrons multi-couches (Multi-Layer Perceptrons, ou MLP). Elle offre à peu près les mêmes méthodes que la classe net, mais celles-ci ont été réecrites pour tenir compte de la structure optimisée des réseaux organisés en couches. Dans la classe mlp, les neurones et les liaisons sont classés par couche, et sont toujours maintenus dans l'ordre au fil des modifications. Ainsi les opérations de propagation et rétropropagation sont effectuées beaucoup plus vite. La classe doit garder en mémoire, en plus de la structure de net, le nombre de couches et la liste du nombre d'unités sur chaque couche.

Definition at line 25 of file mlp.h.

Constructor & Destructor Documentation

◆ mlp() [1/3]

template<class T, class U>
mlp< T, U >::mlp ( )
inline

Réseau vide.

Definition at line 32 of file mlp.h.

References _couch, _nc, and net< T, U >::net().

Referenced by mlp(), and operator=().

◆ mlp() [2/3]

template<class T, class U>
mlp< T, U >::mlp ( const char * nom,
int nc,
int * couch )
inline

Couches initialisées.

\ Crée un réseau de nom nom, de nc couches, et dont le nombre de neurones sur chaque couche est donné par le tableau couch. Chaque neurone d'une couche cachée ou de sortie est relié à tous les neurones de la couche précédente.

Definition at line 39 of file mlp.h.

References couch(), init(), nc(), and net< T, U >::net().

◆ mlp() [3/3]

template<class T, class U>
mlp< T, U >::mlp ( const mlp< T, U > & pmc)

References mlp(), and net< T, U >::pmc().

◆ ~mlp()

template<class T, class U>
virtual mlp< T, U >::~mlp ( )
inlinevirtual

Definition at line 44 of file mlp.h.

References _couch.

Member Function Documentation

◆ add_le()

template<class T, class U>
virtual int mlp< T, U >::add_le ( int c,
int tar,
int co,
int org,
U w )
virtual

Ajoute un lien élémentaire.

\ Ajoute un lien élémentaire du neurone or de la couche co vers le neurone tar de la couche c, avec le poids w. 0 signifie un succès.

◆ add_link() [1/2]

template<class T, class U>
virtual int mlp< T, U >::add_link ( int c,
int tar )
virtual

Ajout d'une liaison.

\ Idem mais le nombre de liaisons élémentaires est ici égal au nombre de neurones sur la couche précédente, et chaque neurone de cette couche précédente est relié à cette cible. Les poids sont s définir.

Reimplemented from net< T, U >.

◆ add_link() [2/2]

template<class T, class U>
virtual int mlp< T, U >::add_link ( int c,
int tar,
int nli )
virtual

Ajout d'une liaison.

\ Ajoute une liaison vers le neurone no tar de la couche c. Cette liaison possèdera nli liens élémentaires. Les origines et poids de ces liaisons seront à préciser ensuite. La fonction renvoie 0 pour un succès.

◆ add_neur()

template<class T, class U>
virtual void mlp< T, U >::add_neur ( const char * nom,
int c,
T bia,
T sor )
virtual

Ajout d'un neurone.

\ Ajoute un neurone de nom nom sur la couche c. Ce nouveau neurone sera le dernier de la couche, et sera initialisé avec le biais bia et la sortie sor. En cas de réussite, la fonction retourne 0.

◆ aff()

template<class T, class U>
virtual void mlp< T, U >::aff ( ) const
virtual

Affichage du contenu du réseau.

Reimplemented from net< T, U >.

◆ backprop() [1/2]

template<class T, class U>
virtual int mlp< T, U >::backprop ( const pat< T > & pa,
int nc,
double eta,
int flg = 0,
T * err = NULL )
virtual

Apprentissage.

\ Effectue l'apprentissage du réseau à partir de la base d'apprentissage pa. nc cycles sont accomplis sur l'ensemble de la base, et l'ordre de passage des exemples est tiré au sort à chaque cycle. eta précise le coefficient de modification des poids de l'algorithme du gradient et flg précise s'il faut afficher tous les (nc/10) cycles où l'on en est (0: pas d'affichage). De même que pour prop(), cette méthode est optimisée pour un perceptron multi-couches bien trié.

References nc().

◆ backprop() [2/2]

template<class T, class U>
virtual T mlp< T, U >::backprop ( T * learnO,
double eta )
virtual

Apprentissage, 1 passe, à partir d'un état déjà propagé.

\ Fonction utilisée par backprop(..)# avec paramètres. Elle suppose que l'exemple a déjà été propagé (par prop()#).

Parameters
learnOTableau des sorties d'apprentissage (désirées)
etafacteur d'apprentissage
Returns
erreur entre les sorties désirées et obtenues (AVANT apprentissage !)

◆ couch()

template<class T, class U>
int * mlp< T, U >::couch ( ) const
inline

Tableau des nombres de neurones sur chaque couche.

Definition at line 160 of file mlp.h.

References _couch.

Referenced by init(), and mlp().

◆ del_le()

template<class T, class U>
virtual int mlp< T, U >::del_le ( int c,
int tar,
int co,
int org )
virtual

Elimination d'un lien élémentaire.

\ Enlève un lien élémentaire du neurone or de la couche co vers le neurone tar de la couche c, et retourne 0 en cas de réussite.

◆ del_link()

template<class T, class U>
virtual int mlp< T, U >::del_link ( int c,
int no )
virtual

Elimination d'une liaison.

\ Enlève une liaison vers le neurone no no de la couche c. Le retour est 0 en cas de succès.

References net< T, U >::no().

◆ del_neur()

template<class T, class U>
virtual int mlp< T, U >::del_neur ( int c,
int no )
virtual

Elimination d'un neurone.

\ Enlève le no-ème neurone de la couche c, ainsi que toutes les liaisons qui en partemt ou y aboutissent. La fonction retourne 0 en cas de réussite.

References net< T, U >::no().

◆ empty()

template<class T, class U>
virtual void mlp< T, U >::empty ( )
virtual

Vidange du réseau.

Reimplemented from net< T, U >.

◆ get_link()

template<class T, class U>
int mlp< T, U >::get_link ( int c,
int n )
inline

Numéro de liaison.

\ Renvoie le numéro de la liaison vers le neurone n de la couche c.

Definition at line 102 of file mlp.h.

References net< T, U >::get_link(), and get_neur().

◆ get_neur()

template<class T, class U>
int mlp< T, U >::get_neur ( int c,
int n )
inline

Numéro d'un neurone.

\ Renvoie le numéro du neurone n de la couche c.

Definition at line 98 of file mlp.h.

References _couch.

Referenced by get_link().

◆ init()

template<class T, class U>
virtual void mlp< T, U >::init ( const char * nom,
int nc,
int * couch )
virtual

Initialisation du réseau.

\ Initialise le PMC, sans désallouer les éventuelles allocations précédentes !

References couch(), and nc().

Referenced by mlp().

◆ load() [1/2]

template<class T, class U>
virtual int mlp< T, U >::load ( const char * nom)
virtual

Charge le réseau.

\ Charge un PMC à partir d'un fichier SNNS. Le réseau est lu puis trié, à la différence de la méthode load() de la classe net. Comme toujours, 0 signifie une réussite.

Reimplemented from net< T, U >.

◆ load() [2/2]

template<class T, class U>
virtual int mlp< T, U >::load ( std::istream & fich)
virtual

Charge le réseau à partir d'un stream déja ouvert.

Reimplemented from net< T, U >.

◆ nc()

template<class T, class U>
int mlp< T, U >::nc ( ) const
inline

Nombre de couches.

Definition at line 158 of file mlp.h.

References _nc.

Referenced by backprop(), init(), and mlp().

◆ operator=()

template<class T, class U>
mlp< T, U > & mlp< T, U >::operator= ( const mlp< T, U > & pmc)

References mlp(), and net< T, U >::pmc().

◆ prop() [1/2]

template<class T, class U>
virtual int mlp< T, U >::prop ( )
virtual

Propage les valeurs d'entrées (préalablemet positionnées)

Reimplemented from net< T, U >.

◆ prop() [2/2]

template<class T, class U>
virtual int mlp< T, U >::prop ( const pat< T > & pa,
int n )
virtual

Fait fonctionner le réseau.

\ Effectue la propagation avant de l'exemple n de la base d'exemples pa à travers le réseau. L'algorithme utilisé suppose que les neurones et les liaisons sont classés dans l'ordre des couches, comme c'est le cas normalement. Ainsi l'opération est nettement plus rapide que la méthode prop() de la classe net. 0 est renvoyé si tout s'est bien passé.

Reimplemented from net< T, U >.

◆ Reduction()

template<class T, class U>
virtual void mlp< T, U >::Reduction ( )
virtual

Réduit pour un PMC à 3 couches.

\ Pour un PMC à 3 couches, élimine les neurones redondants, selon l'algorithme de Fukumizu

◆ ReductionIndex()

template<class T, class U>
virtual void mlp< T, U >::ReductionIndex ( int j)
virtual

Fait la réduction pour 1 neurone donné, j-ème de la couche cachée.

◆ trie()

template<class T, class U>
virtual int mlp< T, U >::trie ( )
virtual

Trie du réseau.

\ Trie le réseau, en essayant de repérer les différentes couches, et place les unités et les liaisons dans l'ordre des couches. Si tout se passe bien, la fonction renvoie 0.

Member Data Documentation

◆ _couch

template<class T, class U>
int* mlp< T, U >::_couch
protected

Tableau des nombres de neurones par couche.

Definition at line 169 of file mlp.h.

Referenced by couch(), get_neur(), mlp(), and ~mlp().

◆ _nc

template<class T, class U>
int mlp< T, U >::_nc
protected

Nombre de couches.

Definition at line 167 of file mlp.h.

Referenced by mlp(), and nc().


The documentation for this class was generated from the following file: