RapidLib  v0.1.2
A simple library for interactive machine learning
neuralNetwork.h
Go to the documentation of this file.
1 #ifndef neuralNetwork_h
2 #define neuralNetwork_h
3 #include <vector>
4 #include "baseModel.h"
5 
6 #ifndef EMSCRIPTEN
7 #include "json.h"
8 #endif
9 
10 #define LEARNING_RATE 0.3
11 #define MOMENTUM 0.2
12 #define NUM_EPOCHS 500
13 
18 class neuralNetwork : public baseModel {
19 
20 public:
22  neuralNetwork(const int &num_inputs,
23  const std::vector<int> &which_inputs,
24  const int &num_hidden_layers,
25  const int &num_hidden_nodes,
26  const std::vector<double> &weights,
27  const std::vector<double> &wHiddenOutput,
28  const std::vector<double> &inRanges,
29  const std::vector<double> &inBases,
30  const double &outRange,
31  const double &outBase);
32 
42  neuralNetwork(const int &num_inputs,
43  const std::vector<int> &which_inputs,
44  const int &num_hidden_layer,
45  const int &num_hidden_nodes);
46 
49 
54  double process(const std::vector<double> &inputVector);
55 
56  int getNumInputs();
57  std::vector<int> getWhichInputs();
58  int getNumHiddenLayers();
59  int getNumHiddenNodes();
60 
61  std::vector<double> getWeights();
62  std::vector<double> getWHiddenOutput();
63 
64  std::vector<double> getInRanges();
65  std::vector<double> getInBases();
66  double getOutRange();
67  double getOutBase();
68 
69 #ifndef EMSCRIPTEN
70  void getJSONDescription(Json::Value &currentModel);
71 #endif
72 
73 
74 private:
76  int numInputs;
77  std::vector<int> whichInputs;
78  int numHiddenLayers;
79  int numHiddenNodes;
80 
82  std::vector<double> inputNeurons;
83  std::vector<std::vector<double>> hiddenNeurons;
84  double outputNeuron;
85 
87  std::vector<std::vector<std::vector<double>>> weights;
88  std::vector<double> wHiddenOutput;
89 
91  std::vector<double> inRanges;
92  std::vector<double> inBases;
93  double outRange;
94  double outBase;
95 
97  inline double activationFunction(double);
98 
100 public:
106  void train(const std::vector<trainingExample> &trainingSet);
107 
108 private:
110  double learningRate;
111  double momentum;
112  int numEpochs;
113 
115  std::vector<std::vector< std::vector<double>>> deltaWeights;
116  std::vector<double> deltaHiddenOutput;
117 
119  std::vector<double> hiddenErrorGradients;
120  double outputErrorGradient;
121  inline double getHiddenErrorGradient(int layer, int neuron);
122 
126  void backpropagate(const double &desiredOutput);
127 
129  void updateWeights();
130 };
131 
132 #endif
~neuralNetwork()
Definition: neuralNetwork.cpp:160
void train(const std::vector< trainingExample > &trainingSet)
Definition: neuralNetwork.cpp:315
std::vector< double > getWHiddenOutput()
Definition: neuralNetwork.cpp:208
std::vector< double > getInBases()
Definition: neuralNetwork.cpp:216
std::vector< double > getInRanges()
Definition: neuralNetwork.cpp:212
int getNumHiddenNodes()
Definition: neuralNetwork.cpp:192
std::vector< int > getWhichInputs()
Definition: neuralNetwork.cpp:184
int getNumHiddenLayers()
Definition: neuralNetwork.cpp:188
void getJSONDescription(Json::Value &currentModel)
Definition: neuralNetwork.cpp:230
int getNumInputs()
Definition: neuralNetwork.cpp:180
Definition: baseModel.h:12
neuralNetwork(const int &num_inputs, const std::vector< int > &which_inputs, const int &num_hidden_layers, const int &num_hidden_nodes, const std::vector< double > &weights, const std::vector< double > &wHiddenOutput, const std::vector< double > &inRanges, const std::vector< double > &inBases, const double &outRange, const double &outBase)
Definition: neuralNetwork.cpp:15
double getOutRange()
Definition: neuralNetwork.cpp:220
Definition: neuralNetwork.h:18
double getOutBase()
Definition: neuralNetwork.cpp:224
std::vector< double > getWeights()
Definition: neuralNetwork.cpp:196
double process(const std::vector< double > &inputVector)
Definition: neuralNetwork.cpp:273