From 8969d5ba2ee401e0306bcec543b5b7b97e53c65f Mon Sep 17 00:00:00 2001 From: LeLeLeLeto Date: Tue, 31 Dec 2024 17:22:36 +0100 Subject: [PATCH] Added network backpropagation, only works for last layer for now --- network.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/network.h b/network.h index 1806fa9..421211b 100644 --- a/network.h +++ b/network.h @@ -15,11 +15,27 @@ class Network { inline void Forward(); + inline void BackPropagate(Matrix); + // Constructors // Input size, Array of hidden sizes, Output size Network(int, std::vector, int); }; +void Network::BackPropagate(Matrix target){ + // Calculate derivative of loss in respect to A (dca) for output layer + // loss = (A - Y)^2 + // derivative = 2(A - Y) + Matrix loss = this->output_layer.activated_output.Substract(&target); + loss = loss.Hadamard(&loss); + // loss.Print("Loss"); + Matrix dca = this->output_layer.activated_output.Substract(&target); + dca = dca.Multiply(2.0F); + // dca.Print("DCA"); + + this->output_layer.BackPropagate(this->hidden_layers[this->hidden_layers.size() - 1].activated_output, dca, &Layer::SigmoidPrime); +} + Network::Network(int input_size, std::vector hidden_sizes, int output_size){ this->input = Matrix(input_size, 1);