RapidLib  v2.2.0
A simple library for interactive machine learning
neuralNetwork.h
Go to the documentation of this file.
1 
10 #ifndef NEURALNETWORK_H
11 #define NEURALNETWORK_H
12 
13 #include <vector>
14 #include "baseModel.h"
15 
16 #ifndef EMSCRIPTEN
17 #include "../dependencies/json/json.h"
18 #endif
19 
24 template<typename T>
25 class neuralNetwork final : public baseModel<T>
26 {
27 public:
29  neuralNetwork(const size_t& num_inputs,
30  const std::vector<size_t>& which_inputs,
31  const size_t& num_hidden_layers,
32  const size_t& num_hidden_nodes,
33  const std::vector<T>& weights,
34  const std::vector<T>& wHiddenOutput,
35  const std::vector<T>& inRanges,
36  const std::vector<T>& inBases,
37  const T& outRange,
38  const T& outBase);
39 
49  neuralNetwork(const size_t& num_inputs,
50  const std::vector<size_t>& which_inputs,
51  const size_t& num_hidden_layer,
52  const size_t& num_hidden_nodes);
53 
56 
61  T run(const std::vector<T>& inputVector) const override;
62 
63  void reset() override;
64 
65  size_t getNumInputs() const override;
66  std::vector<size_t> getWhichInputs() const override;
67 
68  size_t getNumHiddenLayers() const;
69  void setNumHiddenLayers(size_t num_hidden_layers);
70 
71  size_t getNumHiddenNodes() const;
72  void setNumHiddenNodes(size_t num_hidden_nodes);
73 
74  size_t getEpochs() const;
75  void setEpochs(const size_t& epochs);
76 
77  std::vector<T> getWeights() const;
78  std::vector<T> getWHiddenOutput() const;
79 
80  std::vector<T> getInRanges() const;
81  std::vector<T> getInBases() const;
82  T getOutRange() const;
83  T getOutBase() const;
84 
85 #ifndef EMSCRIPTEN
86  void getJSONDescription(Json::Value& currentModel) override;
87 #endif
88 
89 
90 private:
92  size_t numInputs;
93  std::vector<size_t> whichInputs;
94  size_t numHiddenLayers;
95  size_t numHiddenNodes;
96 
98  std::vector<T> inputLayer;
99  std::vector<std::vector<T> > hiddenLayers;
100  T outputNeuron;
101 
103  std::vector<std::vector<std::vector<T> > > weights;
104  std::vector<T> wHiddenOutput;
105 
107  std::vector<T> inRanges;
108  std::vector<T> inBases;
109  T outRange;
110  T outBase;
111 
113  inline T activationFunction(T) const;
114 
117 
118 public:
124  void train(const std::vector<trainingExampleTemplate<T> >& trainingSet) override;
125 
132  void train(const std::vector<trainingExampleTemplate<T> >& trainingSet, const std::size_t whichOutput) override;
133 
135  size_t getCurrentEpoch() const;
136 
137 private:
139  T learningRate { 0.3 };
140  T momentum { 0.2 };
141  size_t numEpochs { 500 };
142  size_t currentEpoch { 0 };
143 
145  std::vector<std::vector< std::vector<T> > > deltaWeights;
146  std::vector<T> deltaHiddenOutput;
147 
149  T outputErrorGradient;
150  inline T getHiddenErrorGradient(size_t layer, size_t neuron);
151 
152  void initTrainer();
153 
157  void runInternal(const std::vector<T>& inputVector, std::vector<T>& inputLayer, std::vector<std::vector<T>>& hiddenLayers, T& outputNeuron) const;
158  void backpropagate(const T& desiredOutput);
159 
161  void updateWeights();
162 };
163 
164 #endif
Definition: baseModel.h:42
Definition: neuralNetwork.h:26
std::vector< T > getInBases() const
Definition: neuralNetwork.cpp:319
T getOutRange() const
Definition: neuralNetwork.cpp:325
std::vector< T > getWeights() const
Definition: neuralNetwork.cpp:288
T getOutBase() const
Definition: neuralNetwork.cpp:331
void train(const std::vector< trainingExampleTemplate< T > > &trainingSet) override
These pertain to the training, and aren't need to run a trained model //.
Definition: neuralNetwork.cpp:454
neuralNetwork(const size_t &num_inputs, const std::vector< size_t > &which_inputs, const size_t &num_hidden_layers, const size_t &num_hidden_nodes, const std::vector< T > &weights, const std::vector< T > &wHiddenOutput, const std::vector< T > &inRanges, const std::vector< T > &inBases, const T &outRange, const T &outBase)
Definition: neuralNetwork.cpp:41
void setNumHiddenNodes(size_t num_hidden_nodes)
Definition: neuralNetwork.cpp:268
void reset() override
Definition: neuralNetwork.cpp:166
size_t getNumInputs() const override
Definition: neuralNetwork.cpp:236
void setNumHiddenLayers(size_t num_hidden_layers)
Definition: neuralNetwork.cpp:254
void getJSONDescription(Json::Value &currentModel) override
Definition: neuralNetwork.cpp:338
std::vector< size_t > getWhichInputs() const override
Definition: neuralNetwork.cpp:242
size_t getNumHiddenNodes() const
Definition: neuralNetwork.cpp:262
T run(const std::vector< T > &inputVector) const override
Definition: neuralNetwork.cpp:393
~neuralNetwork()
Definition: neuralNetwork.cpp:161
void setEpochs(const size_t &epochs)
Definition: neuralNetwork.cpp:282
std::vector< T > getInRanges() const
Definition: neuralNetwork.cpp:313
size_t getNumHiddenLayers() const
Definition: neuralNetwork.cpp:248
size_t getEpochs() const
Definition: neuralNetwork.cpp:276
std::vector< T > getWHiddenOutput() const
Definition: neuralNetwork.cpp:307
size_t getCurrentEpoch() const
Definition: neuralNetwork.cpp:580
Definition: trainingExample.h:19