Neuron: neural networks


gaussnet.h
Go to the documentation of this file.
1
2#ifndef NEUR_GAUSS_GAUSSNET_H
3#define NEUR_GAUSS_GAUSSNET_H
4
5
7#include <vector>
8
9
14{
15public:
18
26 typedef double (GaussNet::*LearnFunc)( const std::vector<double> & vec,
27 double d,
28 double etaW, double etaC,
29 double etaS);
35 typedef void (GaussNet::*RandInitFunc)( double cmax, double smin,
36 double smax, double wmax );
38
41
42 static unsigned CyclePeriod;
44
47
50 GaussNet( const GaussNet & gn );
52 virtual ~GaussNet();
54
57
58 GaussNet & operator = ( const GaussNet & gn );
60
63
64 virtual void clear();
66 virtual void init( unsigned ninp, unsigned ngauss, bool samesigma = true );
74 void randInitAll( double cmax = 1, double smin = 0.3,
75 double smax = 5, double wmax = 1 );
77 void randInitWeights( double cmax = 0, double smin = 0.3,
78 double smax = 5, double wmax = 1 );
80 void randInitCenters( double cmax = 0, double smin = 0.3,
81 double smax = 5, double wmax = 1 );
83 void randInitSigma( double cmax = 1, double smin = 0.5,
84 double smax = 5, double wmax = 1 );
86 void randInitWtSig( double cmax = 1, double smin = 0.5,
87 double smax = 5, double wmax = 1 );
89
92 unsigned nInputs() const { return( _ninputs ); }
93 unsigned nGauss() const;
94 const Gaussian* gauss( unsigned n ) const;
95 Gaussian* gauss( unsigned n );
96 double weight( unsigned n ) const;
97 void setWeight( unsigned n, double w );
98 template<class InputIterator>
99 void setCenter( unsigned n, const InputIterator & start );
101 void removeGaussian( unsigned num );
102 template<class InputIterator>
103 double prop( const InputIterator & start ) const;
112 double learnAll( const std::vector<double> & vec, double d, double etaW,
113 double etaC = 0, double etaS = 0 );
115 double learnWeights( const std::vector<double> & vec, double d, double etaW,
116 double etaC = 0, double etaS = 0 );
118 double learnCenters( const std::vector<double> & vec, double d, double etaW,
119 double etaC = 0, double etaS = 0 );
121 double learnSigma( const std::vector<double> & vec, double d, double etaW,
122 double etaC = 0, double etaS = 0 );
124 double learnWtSig( const std::vector<double> & vec, double d, double etaW,
125 double etaC = 0, double etaS = 0 );
127 double learnMulSig( const std::vector<double> & vec, double d, double etaW,
128 double etaC = 0, double etaS = 0 );
130 double learnCycle( const std::vector<double> & vec, double d, double etaW,
131 double etaC = 0, double etaS = 0 );
133
134protected:
135
136private:
137 struct Private;
138 Private *d;
140 unsigned _ninputs;
141};
142
143
144// inline
145
146
147template<class InputIterator>
148inline double GaussNet::prop( const InputIterator & start ) const
149{
150 unsigned i, n = nGauss();
151 double sum = 0;
152
153 for( i=0; i<n; ++i )
154 sum += gauss( i )->value( start ) * weight( i );
155
156 return( sum );
157}
158
159
160template<class InputIterator>
161inline void GaussNet::setCenter( unsigned n, const InputIterator & start )
162{
163 gauss(n)->setCenter( start );
164}
165
166
167#endif
168
169
void randInitAll(double cmax=1, double smin=0.3, double smax=5, double wmax=1)
Initialise avec des valeurs aléatoires.
virtual ~GaussNet()
const Gaussian * gauss(unsigned n) const
double learnMulSig(const std::vector< double > &vec, double d, double etaW, double etaC=0, double etaS=0)
Aprentissage avec modifs multiplicatives sur les sigmas.
virtual void init(unsigned ninp, unsigned ngauss, bool samesigma=true)
Crée le réseau avec ninp entrées et ngauss gaussiennes.
virtual void clear()
Efface tout.
void randInitCenters(double cmax=0, double smin=0.3, double smax=5, double wmax=1)
Initialise seulement les centres.
double weight(unsigned n) const
unsigned nGauss() const
double learnCenters(const std::vector< double > &vec, double d, double etaW, double etaC=0, double etaS=0)
Apprentissage des centres seuls.
GaussNet(const GaussNet &gn)
Copie.
double learnAll(const std::vector< double > &vec, double d, double etaW, double etaC=0, double etaS=0)
Apprentissage par gradient.
Gaussian * gauss(unsigned n)
GaussNet & operator=(const GaussNet &gn)
void setCenter(unsigned n, const InputIterator &start)
Definition gaussnet.h:161
double learnSigma(const std::vector< double > &vec, double d, double etaW, double etaC=0, double etaS=0)
Apprentissage des écarts-types seuls.
double learnCycle(const std::vector< double > &vec, double d, double etaW, double etaC=0, double etaS=0)
Apprentissage alterné Wt - Center - Sigma.
void removeGaussian(unsigned num)
RandInitFunc randInit
Fonction d'initialisation.
Definition gaussnet.h:68
LearnFunc learn
Fonction d'apprentissage.
Definition gaussnet.h:105
double prop(const InputIterator &start) const
Definition gaussnet.h:148
double learnWtSig(const std::vector< double > &vec, double d, double etaW, double etaC=0, double etaS=0)
Apprentissage des coefs et des écarts-types.
double learnWeights(const std::vector< double > &vec, double d, double etaW, double etaC=0, double etaS=0)
Apprentissage des coefs seuls.
void(GaussNet::* RandInitFunc)(double cmax, double smin, double smax, double wmax)
Type de fonction d'initialisation aléatoire des paramètres du réseau.
Definition gaussnet.h:35
static unsigned CyclePeriod
Nombre de passes entre changements de type d'apprentissage.
Definition gaussnet.h:42
Gaussian * addGaussian()
void randInitSigma(double cmax=1, double smin=0.5, double smax=5, double wmax=1)
Initialise seulement les écarts-types.
void setWeight(unsigned n, double w)
void randInitWtSig(double cmax=1, double smin=0.5, double smax=5, double wmax=1)
Initialise les poids et les écarts-types.
double(GaussNet::* LearnFunc)(const std::vector< double > &vec, double d, double etaW, double etaC, double etaS)
Type de fonction d'apprentissage.
Definition gaussnet.h:26
void randInitWeights(double cmax=0, double smin=0.3, double smax=5, double wmax=1)
Initialise seulement les poids.
unsigned nInputs() const
Definition gaussnet.h:92
Gaussienne, avec centre et écart-type.
Definition gaussian.h:12
void setCenter(const InputIterator &start)
Definition gaussian.h:118
double value(const InputIterator &start) const
Definition gaussian.h:75