diff options
author | Paul Oliver <contact@pauloliver.dev> | 2024-02-29 03:15:03 +0100 |
---|---|---|
committer | Paul Oliver <contact@pauloliver.dev> | 2024-02-29 03:15:30 +0100 |
commit | 6fd23da97fa9700f59c61a966b4bf7d25fa46b34 (patch) | |
tree | d5fe3a8305a5f57e5b4cedc8300e951c74696cc5 /FullyRN.cpp |
Diffstat (limited to 'FullyRN.cpp')
-rw-r--r-- | FullyRN.cpp | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/FullyRN.cpp b/FullyRN.cpp new file mode 100644 index 0000000..ecc88d5 --- /dev/null +++ b/FullyRN.cpp @@ -0,0 +1,40 @@ +#include "FullyRN.hpp" + +FullyRN::FullyRN(unsigned inputCount, unsigned hiddenNodeCount, unsigned outputCount, NodeClass nodeClass, bool zeroed) +: DualMLP(0, 0, 0, NEURON, true) +{ + unsigned contextSize = inputCount + hiddenNodeCount + outputCount; + m_context.resize(contextSize, 0.f); + + m_firstHiddenLayer = NodeLayer(inputCount + contextSize, inputCount, nodeClass, zeroed); + m_secondHiddenLayer = NodeLayer(contextSize, hiddenNodeCount, nodeClass, zeroed); + m_outputLayer = NodeLayer(contextSize, outputCount, nodeClass, zeroed); + + m_inputCount = inputCount; + m_hiddenNodeCount = hiddenNodeCount; + m_outputCount = outputCount; + m_nodeClass = nodeClass; +} + +std::vector<float> FullyRN::io(const std::vector<float> &inputs) +{ + std::vector<float> response; + + if (inputs.size() != m_inputCount) + { + return response; + } + + auto stateInput = inputs; + stateInput.insert(stateInput.end(), m_context.begin(), m_context.end()); + response = m_firstHiddenLayer.io(stateInput); + + auto hiddenOutput = m_secondHiddenLayer.io(m_context); + response.insert(response.end(), hiddenOutput.begin(), hiddenOutput.end()); + + auto outputOutput = m_outputLayer.io(m_context); + response.insert(response.end(), outputOutput.begin(), outputOutput.end()); + + m_context = response; + return outputOutput; +} |