panann
NeuronContainer.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 NEURONCONTAINER_H__
8 #define NEURONCONTAINER_H__
9 
10 #include <vector>
11 
12 #include "ActivationFunction.h"
13 
14 namespace panann {
15 
68  protected:
69  struct Neuron {
70  size_t input_connection_start_index;
71  size_t input_connection_count;
72  size_t output_connection_start_index;
73  size_t output_connection_count;
74  double field;
75  double value;
76  double error;
77  ActivationFunctionType activation_function_type;
78  };
79 
80  public:
81  NeuronContainer() = default;
82  NeuronContainer(const NeuronContainer&) = delete;
83  NeuronContainer& operator=(const NeuronContainer&) = delete;
84  virtual ~NeuronContainer() = default;
85 
90  void SetInputNeuronCount(size_t input_neuron_count);
91 
95  size_t GetInputNeuronCount() const;
96 
101  void SetOutputNeuronCount(size_t output_neuron_count);
102 
106  size_t GetOutputNeuronCount() const;
107 
112  size_t GetNeuronCount() const;
113 
117  const Neuron& GetNeuron(size_t neuron_index) const;
118 
119  protected:
125  size_t GetHiddenNeuronStartIndex() const;
126 
132  size_t GetInputNeuronStartIndex() const;
133 
139  size_t GetOutputNeuronStartIndex() const;
140 
146  size_t GetBiasNeuronStartIndex() const;
147 
151  size_t GetHiddenNeuronCount() const;
152 
156  size_t GetBiasNeuronCount() const;
157 
163  size_t AddHiddenNeurons(size_t count);
164 
169  void AddBiasNeurons(size_t count);
170 
175  void AllocateNeurons();
176 
180  bool AreNeuronsAllocated() const;
181 
186  void SetNeuronActivationFunction(size_t neuron_index,
187  ActivationFunctionType type);
188 
192  Neuron& GetNeuron(size_t neuron_index);
193 
199  Neuron& GetInputNeuron(size_t input_neuron_index);
200 
206  Neuron& GetOutputNeuron(size_t output_neuron_index);
207 
213  Neuron& GetBiasNeuron(size_t bias_neuron_index);
214 
220  Neuron& GetHiddenNeuron(size_t hidden_neuron_index);
221 
227  const Neuron& GetOutputNeuron(size_t output_neuron_index) const;
228 
229  private:
230  std::vector<Neuron> neurons_;
231  size_t input_neuron_count_ = 0;
232  size_t output_neuron_count_ = 0;
233  size_t hidden_neuron_count_ = 0;
234 
235  // There is always a bias neuron which will be hooked-up to output layer
236  // neurons.
237  size_t bias_neuron_count_ = 1;
238  bool is_allocated_ = false;
239 };
240 
241 } // namespace panann
242 
243 #endif // NEURONCONTAINER_H__
panann::NeuronContainer::GetOutputNeuronStartIndex
size_t GetOutputNeuronStartIndex() const
Definition: NeuronContainer.cc:41
panann::NeuronContainer::GetBiasNeuron
Neuron & GetBiasNeuron(size_t bias_neuron_index)
Definition: NeuronContainer.cc:106
panann::NeuronContainer::SetInputNeuronCount
void SetInputNeuronCount(size_t input_neuron_count)
Definition: NeuronContainer.cc:21
panann::NeuronContainer::SetNeuronActivationFunction
void SetNeuronActivationFunction(size_t neuron_index, ActivationFunctionType type)
panann::NeuronContainer
Definition: NeuronContainer.h:67
panann::NeuronContainer::SetOutputNeuronCount
void SetOutputNeuronCount(size_t output_neuron_count)
Definition: NeuronContainer.cc:30
panann::NeuronContainer::AddHiddenNeurons
size_t AddHiddenNeurons(size_t count)
Definition: NeuronContainer.cc:57
panann::NeuronContainer::GetHiddenNeuronCount
size_t GetHiddenNeuronCount() const
Definition: NeuronContainer.cc:49
panann::NeuronContainer::GetInputNeuronCount
size_t GetInputNeuronCount() const
Definition: NeuronContainer.cc:17
panann::NeuronContainer::GetHiddenNeuron
Neuron & GetHiddenNeuron(size_t hidden_neuron_index)
Definition: NeuronContainer.cc:112
panann::NeuronContainer::GetOutputNeuron
Neuron & GetOutputNeuron(size_t output_neuron_index)
Definition: NeuronContainer.cc:100
panann::NeuronContainer::GetOutputNeuronCount
size_t GetOutputNeuronCount() const
Definition: NeuronContainer.cc:26
panann::NeuronContainer::GetBiasNeuronStartIndex
size_t GetBiasNeuronStartIndex() const
Definition: NeuronContainer.cc:45
panann::NeuronContainer::AreNeuronsAllocated
bool AreNeuronsAllocated() const
Definition: NeuronContainer.cc:86
panann::NeuronContainer::Neuron
Definition: NeuronContainer.h:69
panann::NeuronContainer::GetInputNeuronStartIndex
size_t GetInputNeuronStartIndex() const
Definition: NeuronContainer.cc:37
panann::NeuronContainer::AddBiasNeurons
void AddBiasNeurons(size_t count)
Definition: NeuronContainer.cc:70
panann::NeuronContainer::GetNeuronCount
size_t GetNeuronCount() const
Definition: NeuronContainer.cc:130
panann::NeuronContainer::GetHiddenNeuronStartIndex
size_t GetHiddenNeuronStartIndex() const
Definition: NeuronContainer.cc:35
panann::NeuronContainer::AllocateNeurons
void AllocateNeurons()
Definition: NeuronContainer.cc:75
panann::NeuronContainer::GetBiasNeuronCount
size_t GetBiasNeuronCount() const
Definition: NeuronContainer.cc:53
panann::NeuronContainer::GetNeuron
const Neuron & GetNeuron(size_t neuron_index) const
Definition: NeuronContainer.cc:118
panann::NeuronContainer::GetInputNeuron
Neuron & GetInputNeuron(size_t input_neuron_index)
Definition: NeuronContainer.cc:94