diff --git a/Layer.cpp b/Layer.cpp index 8ddcad8..89eef7d 100644 --- a/Layer.cpp +++ b/Layer.cpp @@ -21,7 +21,15 @@ void Layer::setOutputValues(const std::vector & outputValues) for (const double &value : outputValues) { (neuronIt++)->setOutputValue(value); - } + } +} + +void Layer::setOutputValues(const double *outputValues) +{ + for (size_t neuronIndex = 0; neuronIndex < size(); ++neuronIndex) + { + at(neuronIndex).setOutputValue(outputValues[neuronIndex]); + } } void Layer::feedForward(const Layer &inputLayer) diff --git a/Layer.h b/Layer.h index 94bab0e..595cb26 100644 --- a/Layer.h +++ b/Layer.h @@ -13,6 +13,8 @@ public: Layer(size_t numNeurons); void setOutputValues(const std::vector & outputValues); + void setOutputValues(const double *outputValues); + void feedForward(const Layer &inputLayer); double getWeightedSum(size_t outputNeuron) const; void connectTo(const Layer & nextLayer); diff --git a/Net.cpp b/Net.cpp index 62c786d..fbccaa5 100644 --- a/Net.cpp +++ b/Net.cpp @@ -63,7 +63,22 @@ void Net::feedForward(const std::vector &inputValues) Layer &nextLayer = *(layerIt + 1); nextLayer.feedForward(currentLayer); - } + } +} + +void Net::feedForward(const double *inputValues) +{ + Layer &inputLayer = front(); + + inputLayer.setOutputValues(inputValues); + + for (auto layerIt = begin(); layerIt != end() - 1; ++layerIt) + { + const Layer ¤tLayer = *layerIt; + Layer &nextLayer = *(layerIt + 1); + + nextLayer.feedForward(currentLayer); + } } std::vector Net::getOutput() diff --git a/Net.h b/Net.h index 41a80c0..1ae0c85 100644 --- a/Net.h +++ b/Net.h @@ -15,6 +15,7 @@ public: void initialize(std::initializer_list layerSizes); void feedForward(const std::vector &inputValues); + void feedForward(const double *inputValues); std::vector getOutput(); void backProp(const std::vector &targetValues);