cascade : reading and modifing to fit original implementation
This commit is contained in:
@@ -67,6 +67,8 @@ std::pair<std::shared_ptr<NeuralNetwork::Neuron>, std::vector<float>> CascadeCor
|
|||||||
|
|
||||||
std::vector<std::vector<float>> errors(patterns.size());
|
std::vector<std::vector<float>> errors(patterns.size());
|
||||||
std::vector<float> meanErrors(outputs);
|
std::vector<float> meanErrors(outputs);
|
||||||
|
float sumSquareError=0;
|
||||||
|
|
||||||
for(std::size_t patternNumber = 0; patternNumber < patterns.size(); patternNumber++) {
|
for(std::size_t patternNumber = 0; patternNumber < patterns.size(); patternNumber++) {
|
||||||
auto &pattern = patterns[patternNumber];
|
auto &pattern = patterns[patternNumber];
|
||||||
errors[patternNumber].resize(network.outputs());
|
errors[patternNumber].resize(network.outputs());
|
||||||
@@ -76,6 +78,7 @@ std::pair<std::shared_ptr<NeuralNetwork::Neuron>, std::vector<float>> CascadeCor
|
|||||||
float error = pow(pattern.second[outputIndex] - output[outputIndex], 2);
|
float error = pow(pattern.second[outputIndex] - output[outputIndex], 2);
|
||||||
errors[patternNumber][outputIndex] = error;
|
errors[patternNumber][outputIndex] = error;
|
||||||
meanErrors[outputIndex] += error;
|
meanErrors[outputIndex] += error;
|
||||||
|
sumSquareError+=error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -120,8 +123,8 @@ std::pair<std::shared_ptr<NeuralNetwork::Neuron>, std::vector<float>> CascadeCor
|
|||||||
float thetaO = 0.0;
|
float thetaO = 0.0;
|
||||||
for(std::size_t meanError = 0; meanError < meanErrors.size(); meanError++) {
|
for(std::size_t meanError = 0; meanError < meanErrors.size(); meanError++) {
|
||||||
(*candidate)(patternsForOutput[err].first);
|
(*candidate)(patternsForOutput[err].first);
|
||||||
float derivative = candidate->getActivationFunction().derivatedOutput(candidate->value(), candidate->output());
|
float derivative = candidate->getActivationFunction().derivatedOutput(candidate->value(), candidate->output())/sumSquareError;
|
||||||
thetaO += correlationSigns[meanError] * (errors[err][meanError] - meanErrors[meanError]) * derivative * candidate->weight(input);
|
thetaO += correlationSigns[meanError] * (errors[err][meanError] - meanErrors[meanError]) * derivative * patternsForOutput[err].first[input];
|
||||||
}
|
}
|
||||||
dcdw += thetaO;
|
dcdw += thetaO;
|
||||||
}
|
}
|
||||||
@@ -149,5 +152,4 @@ std::pair<std::shared_ptr<NeuralNetwork::Neuron>, std::vector<float>> CascadeCor
|
|||||||
std::cout << "iter: " << iterations << ", correlation: " << bestCorrelation << ", " << lastCorrelation << "\n";
|
std::cout << "iter: " << iterations << ", correlation: " << bestCorrelation << ", " << lastCorrelation << "\n";
|
||||||
|
|
||||||
return {bestCandidate, bestCorrelations};
|
return {bestCandidate, bestCorrelations};
|
||||||
}
|
}
|
||||||
|
|
||||||
Reference in New Issue
Block a user