Fixed feed-forward algo

This commit is contained in:
Michael Mandl 2015-10-22 16:02:27 +02:00
parent 3d30346f2d
commit f22e4221a1
3 changed files with 29 additions and 5 deletions

View file

@ -24,10 +24,9 @@ void Layer::setOutputValues(const std::vector<double> & outputValues)
void Layer::feedForward(const Layer &inputLayer) void Layer::feedForward(const Layer &inputLayer)
{ {
int neuronNumber = 0; for (int neuronNumber = 0; neuronNumber < sizeWithoutBiasNeuron(); ++neuronNumber)
for (auto neuronIt = begin(); neuronIt != end(); ++neuronIt)
{ {
neuronIt->feedForward(inputLayer.getWeightedSum(neuronNumber++)); at(neuronNumber).feedForward(inputLayer.getWeightedSum(neuronNumber));
} }
} }
@ -47,7 +46,7 @@ void Layer::connectTo(const Layer & nextLayer)
{ {
for (Neuron &neuron : *this) for (Neuron &neuron : *this)
{ {
neuron.createRandomOutputWeights(nextLayer.size()); neuron.createOutputWeights(nextLayer.sizeWithoutBiasNeuron(), 0.5);
} }
} }

View file

@ -50,6 +50,26 @@ void Neuron::createRandomOutputWeights(size_t numberOfWeights)
} }
} }
void Neuron::createOutputWeights(std::list<double> weights)
{
outputWeights.clear();
for (const double &weight : weights)
{
outputWeights.push_back(weight);
}
}
void Neuron::createOutputWeights(size_t numberOfWeights, double weight)
{
outputWeights.clear();
for (unsigned int i = 0; i < numberOfWeights; ++i)
{
outputWeights.push_back(weight);
}
}
double Neuron::getOutputValue() const double Neuron::getOutputValue() const
{ {
return outputValue; return outputValue;

View file

@ -1,6 +1,7 @@
#pragma once #pragma once
#include <vector> #include <vector>
#include <list>
class Layer; class Layer;
@ -17,7 +18,11 @@ public:
void setOutputValue(double value); void setOutputValue(double value);
void feedForward(double inputValue); void feedForward(double inputValue);
double getWeightedOutputValue(unsigned int outputNeuron) const; double getWeightedOutputValue(unsigned int outputNeuron) const;
void createRandomOutputWeights(size_t numberOfWeights); void createRandomOutputWeights(size_t numberOfWeights);
void createOutputWeights(std::list<double> weights);
void createOutputWeights(size_t numberOfWeights, double weight);
double getOutputValue() const; double getOutputValue() const;
void calcOutputGradients(double targetValue); void calcOutputGradients(double targetValue);