panann
MultiLayerNeuralTopology.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 MULTILAYERTOPOLOGY_H__
8 #define MULTILAYERTOPOLOGY_H__
9 
10 #include <vector>
11 
12 #include "NeuronContainer.h"
13 
14 namespace panann {
15 
27  protected:
28  struct Layer {
33 
37  size_t neuron_count;
38  };
39 
40  struct InputConnection {
41  size_t from_neuron_index;
42  size_t to_neuron_index;
43  };
44 
46  size_t input_connection_index;
47  };
48 
49  public:
50  MultiLayerNeuralTopology() = default;
52  MultiLayerNeuralTopology& operator=(const MultiLayerNeuralTopology&) = delete;
53  ~MultiLayerNeuralTopology() override = default;
54 
62  void AddHiddenLayer(size_t neuron_count);
63 
71  void DisableShortcutConnections();
72 
79  void ConstructTopology();
80 
86  bool IsTopologyConstructed() const;
87 
91  size_t GetHiddenLayerCount() const;
92 
96  const Layer& GetHiddenLayer(size_t layer_index) const;
97 
101  size_t GetInputConnectionCount() const;
102 
106  size_t GetOutputConnectionCount() const;
107 
112  const InputConnection& GetInputConnection(size_t index) const;
113 
118  const OutputConnection& GetOutputConnection(size_t index) const;
119 
120  protected:
124  Layer& GetHiddenLayer(size_t layer_index);
125 
130  InputConnection& GetInputConnection(size_t index);
131 
136  OutputConnection& GetOutputConnection(size_t index);
137 
142  size_t AddInputConnections(size_t count);
143 
148  size_t AddOutputConnections(size_t count);
149 
154  virtual void FixNeuronConnectionIndices();
155 
159  void AllocateConnections();
160 
164  bool AreConnectionsAllocated() const;
165 
166  virtual void ConnectFully();
167  void ConnectLayerToNeuron(size_t from_neuron_index, size_t from_neuron_count,
168  size_t to_neuron_index);
169  void ConnectLayers(size_t from_neuron_index, size_t from_neuron_count,
170  size_t to_neuron_index, size_t to_neuron_count);
171  void ConnectBiasNeuron(size_t bias_neuron_index, size_t to_neuron_index,
172  size_t to_neuron_count);
173  void ConnectNeurons(size_t from_neuron_index, size_t to_neuron_index);
174 
175  private:
176  std::vector<Layer> hidden_layers_;
177  std::vector<InputConnection> input_connections_;
178  size_t input_connection_count_ = 0;
179  std::vector<OutputConnection> output_connections_;
180  size_t output_connection_count_ = 0;
181 
182  bool enable_shortcut_connections_ = false;
183  bool is_constructed_ = false;
184  bool is_allocated_ = false;
185 };
186 
187 } // namespace panann
188 
189 #endif // MULTILAYERTOPOLOGY_H__
panann::MultiLayerNeuralTopology::OutputConnection
Definition: MultiLayerNeuralTopology.h:45
panann::MultiLayerNeuralTopology::AddInputConnections
size_t AddInputConnections(size_t count)
Definition: MultiLayerNeuralTopology.cc:66
panann::MultiLayerNeuralTopology::GetOutputConnection
const OutputConnection & GetOutputConnection(size_t index) const
Definition: MultiLayerNeuralTopology.cc:260
panann::NeuronContainer
Definition: NeuronContainer.h:67
panann::MultiLayerNeuralTopology::GetHiddenLayerCount
size_t GetHiddenLayerCount() const
Definition: MultiLayerNeuralTopology.cc:16
panann::MultiLayerNeuralTopology::GetInputConnection
const InputConnection & GetInputConnection(size_t index) const
Definition: MultiLayerNeuralTopology.cc:253
panann::MultiLayerNeuralTopology::AddOutputConnections
size_t AddOutputConnections(size_t count)
Definition: MultiLayerNeuralTopology.cc:78
panann::MultiLayerNeuralTopology::InputConnection
Definition: MultiLayerNeuralTopology.h:40
panann::MultiLayerNeuralTopology::ConstructTopology
void ConstructTopology()
Definition: MultiLayerNeuralTopology.cc:413
panann::MultiLayerNeuralTopology::FixNeuronConnectionIndices
virtual void FixNeuronConnectionIndices()
Definition: MultiLayerNeuralTopology.cc:90
panann::MultiLayerNeuralTopology::Layer
Definition: MultiLayerNeuralTopology.h:28
panann::MultiLayerNeuralTopology::AllocateConnections
void AllocateConnections()
Definition: MultiLayerNeuralTopology.cc:225
panann::MultiLayerNeuralTopology
Definition: MultiLayerNeuralTopology.h:26
panann::MultiLayerNeuralTopology::EnableShortcutConnections
void EnableShortcutConnections()
Definition: MultiLayerNeuralTopology.cc:32
panann::MultiLayerNeuralTopology::Layer::neuron_count
size_t neuron_count
Definition: MultiLayerNeuralTopology.h:37
panann::MultiLayerNeuralTopology::GetInputConnectionCount
size_t GetInputConnectionCount() const
Definition: MultiLayerNeuralTopology.cc:58
panann::MultiLayerNeuralTopology::IsTopologyConstructed
bool IsTopologyConstructed() const
Definition: MultiLayerNeuralTopology.cc:424
panann::MultiLayerNeuralTopology::GetHiddenLayer
const Layer & GetHiddenLayer(size_t layer_index) const
Definition: MultiLayerNeuralTopology.cc:26
panann::MultiLayerNeuralTopology::GetOutputConnectionCount
size_t GetOutputConnectionCount() const
Definition: MultiLayerNeuralTopology.cc:62
panann::MultiLayerNeuralTopology::AreConnectionsAllocated
bool AreConnectionsAllocated() const
Definition: MultiLayerNeuralTopology.cc:234
panann::MultiLayerNeuralTopology::AddHiddenLayer
void AddHiddenLayer(size_t neuron_count)
Definition: MultiLayerNeuralTopology.cc:42
panann::MultiLayerNeuralTopology::Layer::neuron_start_index
size_t neuron_start_index
Definition: MultiLayerNeuralTopology.h:32