GestureRecognitionToolkit  Version: 1.0 Revision: 04-03-15
The Gesture Recognition Toolkit (GRT) is a cross-platform, open-source, c++ machine learning library for real-time gesture recognition.
MLP.h
Go to the documentation of this file.
1 
33 #ifndef GRT_MLP_HEADER
34 #define GRT_MLP_HEADER
35 
36 #include "Neuron.h"
37 #include "../../../CoreModules/Regressifier.h"
38 
39 namespace GRT{
40 
41 class MLP : public Regressifier{
42 public:
46  MLP();
47 
51  MLP(const MLP &rhs);
52 
56  virtual ~MLP();
57 
64  MLP &operator=(const MLP &rhs);
65 
73  virtual bool deepCopyFrom(const Regressifier *regressifier);
74 
81  virtual bool train_(ClassificationData &trainingData);
82 
89  virtual bool train_(RegressionData &trainingData);
90 
98  virtual bool predict_(VectorDouble &inputVector);
99 
105  virtual bool clear();
106 
112  virtual bool print() const;
113 
121  virtual bool saveModelToFile(fstream &file) const;
122 
130  virtual bool loadModelFromFile(fstream &file);
131 
139  UINT getNumClasses() const;
140 
156  bool init(const UINT numInputNeurons, const UINT numHiddenNeurons, const UINT numOutputNeurons);
157 
175  bool init(const UINT numInputNeurons, const UINT numHiddenNeurons, const UINT numOutputNeurons, const UINT inputLayerActivationFunction,
176  const UINT hiddenLayerActivationFunction, const UINT outputLayerActivationFunction);
177 
182  void printNetwork() const;
183 
189  bool checkForNAN() const;
190 
197  string activationFunctionToString(const UINT activationFunction) const;
198 
205  UINT activationFunctionFromString(const string activationName) const;
206 
213  bool validateActivationFunction(const UINT avactivationFunction) const;
214 
220  UINT getNumInputNeurons() const;
221 
227  UINT getNumHiddenNeurons() const;
228 
234  UINT getNumOutputNeurons() const;
235 
241  UINT getInputLayerActivationFunction() const;
242 
249 
256 
265  UINT getNumRandomTrainingIterations() const;
266 
272  double getTrainingRate() const;
273 
279  double getMomentum() const;
280 
286  double getGamma() const;
287 
294  double getTrainingError() const;
295 
301  bool getClassificationModeActive() const;
302 
308  bool getRegressionModeActive() const;
309 
315  vector< Neuron > getInputLayer() const;
316 
322  vector< Neuron > getHiddenLayer() const;
323 
329  vector< Neuron > getOutputLayer() const;
330 
337  vector< VectorDouble > getTrainingLog() const;
338 
344  bool getNullRejectionEnabled() const;
345 
353  double getNullRejectionCoeff() const;
354 
362  double getNullRejectionThreshold() const;
363 
372  double getMaximumLikelihood() const;
373 
379  VectorDouble getClassLikelihoods() const;
380 
386  VectorDouble getClassDistances() const;
387 
393  UINT getPredictedClassLabel() const;
394 
402  bool setInputLayerActivationFunction(const UINT activationFunction);
403 
411  bool setHiddenLayerActivationFunction(const UINT activationFunction);
412 
420  bool setOutputLayerActivationFunction(const UINT activationFunction);
421 
430  bool setTrainingRate(const double trainingRate);
431 
439  bool setMomentum(const double momentum);
440 
448  bool setGamma(const double gamma);
449 
460  bool setNumRandomTrainingIterations(const UINT numRandomTrainingIterations);
461 
468  bool setNullRejection(const bool useNullRejection);
469 
479  bool setNullRejectionCoeff(const double nullRejectionCoeff);
480 
481  //Tell the compiler we are using the following functions from the MLBase class to stop hidden virtual function warnings
484  using MLBase::train;
485  using MLBase::train_;
486  using MLBase::predict;
487  using MLBase::predict_;
488 
489 protected:
490  bool inline isNAN(const double v) const;
491 
492  bool trainModel(RegressionData &trainingData);
493 
494  bool trainOnlineGradientDescentClassification(const RegressionData &trainingData,const RegressionData &validationData);
495 
496  bool trainOnlineGradientDescentRegression(const RegressionData &trainingData,const RegressionData &validationData);
497 
498  bool loadLegacyModelFromFile( fstream &file );
499 
509  double back_prop(const VectorDouble &trainingExample,const VectorDouble &targetVector,const double alpha,const double beta);
510 
517  VectorDouble feedforward(VectorDouble trainingExample);
518 
527  void feedforward(const VectorDouble &trainingExample,VectorDouble &inputNeuronsOuput,VectorDouble &hiddenNeuronsOutput,VectorDouble &outputNeuronsOutput);
528 
529  UINT numInputNeurons;
530  UINT numHiddenNeurons;
531  UINT numOutputNeurons;
532  UINT inputLayerActivationFunction;
533  UINT hiddenLayerActivationFunction;
534  UINT outputLayerActivationFunction;
535  UINT numRandomTrainingIterations;
536  UINT trainingMode;
537  double momentum;
538  double gamma;
539  double trainingError;
540  bool initialized;
541  Random random;
542 
543  vector< Neuron > inputLayer;
544  vector< Neuron > hiddenLayer;
545  vector< Neuron > outputLayer;
546  vector< VectorDouble > trainingErrorLog;
547 
548  //Classifier Variables
549  bool classificationModeActive;
550  bool useNullRejection;
551  UINT predictedClassLabel;
552  double nullRejectionThreshold;
553  double nullRejectionCoeff;
554  double maxLikelihood;
555  VectorDouble classLikelihoods;
556 
557  static RegisterRegressifierModule< MLP > registerModule;
558 
559  //Temp Training Stuff
560  VectorDouble inputNeuronsOuput;
561  VectorDouble hiddenNeuronsOutput;
562  VectorDouble outputNeuronsOutput;
563  VectorDouble deltaO;
564  VectorDouble deltaH;
565 
566 public:
567  enum TrainingModes{ONLINE_GRADIENT_DESCENT};
568 
569 };
570 
571 } //End of namespace GRT
572 
573 #endif //GRT_MLP_HEADER
UINT getInputLayerActivationFunction() const
Definition: MLP.cpp:1484
virtual bool saveModelToFile(string filename) const
Definition: MLBase.cpp:135
virtual bool saveModelToFile(fstream &file) const
Definition: MLP.cpp:1049
Definition: MLP.h:41
bool setNumRandomTrainingIterations(const UINT numRandomTrainingIterations)
Definition: MLP.cpp:1691
virtual bool train_(ClassificationData &trainingData)
Definition: MLP.cpp:126
double getMomentum() const
Definition: MLP.cpp:1504
This class implements a Neuron that is used by the Multilayer Perceptron.
bool getNullRejectionEnabled() const
Definition: MLP.cpp:1540
vector< Neuron > getHiddenLayer() const
Definition: MLP.cpp:1528
double getTrainingRate() const
Definition: MLP.cpp:1500
string activationFunctionToString(const UINT activationFunction) const
Definition: MLP.cpp:1573
virtual bool loadModelFromFile(string filename)
Definition: MLBase.cpp:157
virtual bool deepCopyFrom(const Regressifier *regressifier)
Definition: MLP.cpp:108
double getGamma() const
Definition: MLP.cpp:1508
double getNullRejectionCoeff() const
Definition: MLP.cpp:1544
Definition: AdaBoost.cpp:25
bool getRegressionModeActive() const
Definition: MLP.cpp:1520
UINT getNumClasses() const
Definition: MLP.cpp:1466
virtual bool loadModelFromFile(fstream &file)
Definition: MLP.cpp:1123
virtual bool train(ClassificationData trainingData)
Definition: MLBase.cpp:80
bool setMomentum(const double momentum)
Definition: MLP.cpp:1668
bool setHiddenLayerActivationFunction(const UINT activationFunction)
Definition: MLP.cpp:1633
virtual ~MLP()
Definition: MLP.cpp:68
UINT getOutputLayerActivationFunction() const
Definition: MLP.cpp:1492
double getMaximumLikelihood() const
Definition: MLP.cpp:1552
double getNullRejectionThreshold() const
Definition: MLP.cpp:1548
VectorDouble feedforward(VectorDouble trainingExample)
Definition: MLP.cpp:920
UINT getNumRandomTrainingIterations() const
Definition: MLP.cpp:1496
bool setTrainingRate(const double trainingRate)
Definition: MLP.cpp:1664
virtual bool predict_(VectorDouble &inputVector)
Definition: MLP.cpp:160
VectorDouble getClassDistances() const
Definition: MLP.cpp:1562
UINT getHiddenLayerActivationFunction() const
Definition: MLP.cpp:1488
bool init(const UINT numInputNeurons, const UINT numHiddenNeurons, const UINT numOutputNeurons)
Definition: MLP.cpp:219
bool setOutputLayerActivationFunction(const UINT activationFunction)
Definition: MLP.cpp:1649
bool setGamma(const double gamma)
Definition: MLP.cpp:1676
vector< Neuron > getOutputLayer() const
Definition: MLP.cpp:1532
virtual bool print() const
Definition: MLP.cpp:307
void printNetwork() const
Definition: MLP.cpp:986
virtual bool predict(VectorDouble inputVector)
Definition: MLBase.cpp:104
bool setNullRejection(const bool useNullRejection)
Definition: MLP.cpp:1699
double back_prop(const VectorDouble &trainingExample, const VectorDouble &targetVector, const double alpha, const double beta)
Definition: MLP.cpp:837
virtual bool predict_(VectorDouble &inputVector)
Definition: MLBase.cpp:106
vector< Neuron > getInputLayer() const
Definition: MLP.cpp:1524
UINT getNumInputNeurons() const
Definition: MLP.cpp:1472
UINT getPredictedClassLabel() const
Definition: MLP.cpp:1568
UINT getNumHiddenNeurons() const
Definition: MLP.cpp:1476
bool checkForNAN() const
Definition: MLP.cpp:1018
UINT activationFunctionFromString(const string activationName) const
Definition: MLP.cpp:1594
virtual bool clear()
Definition: MLP.cpp:291
MLP & operator=(const MLP &rhs)
Definition: MLP.cpp:72
MLP()
Definition: MLP.cpp:28
bool setInputLayerActivationFunction(const UINT activationFunction)
Definition: MLP.cpp:1617
VectorDouble getClassLikelihoods() const
Definition: MLP.cpp:1557
double getTrainingError() const
Definition: MLP.cpp:1512
UINT getNumOutputNeurons() const
Definition: MLP.cpp:1480
vector< VectorDouble > getTrainingLog() const
Definition: MLP.cpp:1536
bool validateActivationFunction(const UINT avactivationFunction) const
Definition: MLP.cpp:1612
bool setNullRejectionCoeff(const double nullRejectionCoeff)
Definition: MLP.cpp:1704
bool getClassificationModeActive() const
Definition: MLP.cpp:1516
virtual bool train_(ClassificationData &trainingData)
Definition: MLBase.cpp:82