panann
Perceptron.h
1 //-------------------------------------------------------------------------------------------------------
2 // Copyright (C) Taylor Woll and panann contributors. All rights reserved.
3 // Licensed under the MIT license. See LICENSE.txt file in the project root for
4 // full license information.
5 //-------------------------------------------------------------------------------------------------------
6 
7 #ifndef PERCEPTRON_H__
8 #define PERCEPTRON_H__
9 
10 #include <vector>
11 
12 #include "ActivationFunction.h"
13 #include "MultiLayerNeuralTopology.h"
14 #include "RandomWrapper.h"
15 
16 namespace panann {
17 
18 class TrainingData;
19 
24  public:
25  enum class ErrorCostFunction : uint8_t {
26  MeanSquareError = 1,
27  MeanAbsoluteError,
28  };
29 
30  Perceptron() = default;
31  Perceptron(const Perceptron&) = delete;
32  Perceptron& operator=(const Perceptron&) = delete;
33  ~Perceptron() override = default;
34 
42  void SetErrorCostFunction(ErrorCostFunction mode);
43  ErrorCostFunction GetErrorCostFunction() const;
44 
49  void SetHiddenNeuronActivationFunctionType(ActivationFunctionType type);
50  ActivationFunctionType GetHiddenNeuronActivationFunctionType() const;
51 
56  void SetOutputNeuronActivationFunctionType(ActivationFunctionType type);
57  ActivationFunctionType GetOutputNeuronActivationFunctionType() const;
58 
62  void InitializeWeightsRandom(double min = -1.0, double max = 1.0);
63 
67  void InitializeWeights(const TrainingData& training_data);
68 
80  virtual void RunForward(const std::vector<double>& input);
81 
91  void RunBackward(const std::vector<double>& output);
92 
104  double GetError(const std::vector<double>& output);
105 
117  double GetError(const TrainingData& training_data);
118 
122  std::vector<double>& GetWeights();
123 
130  void SetWeights(const std::vector<double>& weights);
131 
136  void GetOutput(std::vector<double>* output) const;
137 
142  virtual void Construct();
143 
149  bool IsConstructed() const;
150 
155  void EnableErrorShaping();
156  void DisableErrorShaping();
157 
158  protected:
159  void AllocateWeights();
160  bool AreWeightsAllocated() const;
161 
166  void InitializeNeurons();
167 
172  virtual void InitializeHiddenNeurons();
173 
174  void ComputeNeuronValue(size_t neuron_index);
175  void ComputeNeuronValueRange(size_t neuron_start_index, size_t neuron_count);
176  void ComputeNeuronError(size_t neuron_index);
177 
178  void ResetOutputLayerError();
179  void CalculateOutputLayerError(const std::vector<double>& output);
180 
181  double GetError() const;
182 
183  RandomWrapper& GetRandom();
184 
185  size_t GetWeightCount() const;
186  double& GetWeight(size_t index);
187 
188  private:
189  std::vector<double> weights_;
190  RandomWrapper random_;
191 
192  double error_sum_ = 0;
193  double error_count_ = 0;
194 
195  ErrorCostFunction error_cost_function_ = ErrorCostFunction::MeanSquareError;
196  ActivationFunctionType hidden_neuron_activation_function_type_ =
197  ActivationFunctionType::Sigmoid;
198  ActivationFunctionType output_neuron_activation_function_type_ =
199  ActivationFunctionType::Sigmoid;
200 
201  bool should_shape_error_curve_ = false;
202  bool is_constructed_ = false;
203  bool is_allocated_ = false;
204 };
205 
206 } // namespace panann
207 
208 #endif // PERCEPTRON_H__
panann::Perceptron::SetOutputNeuronActivationFunctionType
void SetOutputNeuronActivationFunctionType(ActivationFunctionType type)
Definition: Perceptron.cc:338
panann::Perceptron::GetError
double GetError(const std::vector< double > &output)
Definition: Perceptron.cc:237
panann::Perceptron::SetHiddenNeuronActivationFunctionType
void SetHiddenNeuronActivationFunctionType(ActivationFunctionType type)
Definition: Perceptron.cc:327
panann::Perceptron::EnableErrorShaping
void EnableErrorShaping()
Definition: Perceptron.cc:391
panann::TrainingData
Definition: TrainingData.h:30
panann::Perceptron::IsConstructed
bool IsConstructed() const
Definition: Perceptron.cc:366
panann::Perceptron::RunBackward
void RunBackward(const std::vector< double > &output)
Definition: Perceptron.cc:186
panann::Perceptron
Definition: Perceptron.h:23
panann::Perceptron::RunForward
virtual void RunForward(const std::vector< double > &input)
Definition: Perceptron.cc:169
panann::Perceptron::Construct
virtual void Construct()
Definition: Perceptron.cc:349
panann::RandomWrapper
Definition: RandomWrapper.h:22
panann::Perceptron::InitializeWeightsRandom
void InitializeWeightsRandom(double min=-1.0, double max=1.0)
Definition: Perceptron.cc:201
panann::Perceptron::InitializeWeights
void InitializeWeights(const TrainingData &training_data)
Definition: Perceptron.cc:209
panann::MultiLayerNeuralTopology
Definition: MultiLayerNeuralTopology.h:26
panann::Perceptron::SetWeights
void SetWeights(const std::vector< double > &weights)
Definition: Perceptron.cc:293
panann::Perceptron::GetWeights
std::vector< double > & GetWeights()
Definition: Perceptron.cc:291
panann::Perceptron::InitializeNeurons
void InitializeNeurons()
Definition: Perceptron.cc:314
panann::Perceptron::GetOutput
void GetOutput(std::vector< double > *output) const
Definition: Perceptron.cc:298
panann::Perceptron::InitializeHiddenNeurons
virtual void InitializeHiddenNeurons()
Definition: Perceptron.cc:306
panann::Perceptron::SetErrorCostFunction
void SetErrorCostFunction(ErrorCostFunction mode)
Definition: Perceptron.cc:112