From 28c1976fb14598af2ce53a9277a6c0a6d94de7a9 Mon Sep 17 00:00:00 2001 From: Michelle Date: Tue, 4 Aug 2026 21:05:20 +0200 Subject: [PATCH] Save Trying do make the backward to work --- ..._softmax_loss_categorical_crossentropy.hpp | 4 +- include/neural_network/loss/loss.hpp | 5 ++ .../loss/loss_categorical_crossentropy.hpp | 4 +- ..._softmax_loss_categorical_crossentropy.cpp | 59 ------------------- src/neural_network/loss/loss.cpp | 42 +++---------- src/neural_network/model/model.cpp | 4 +- 6 files changed, 21 insertions(+), 97 deletions(-) diff --git a/include/neural_network/activation_loss/activation_softmax_loss_categorical_crossentropy.hpp b/include/neural_network/activation_loss/activation_softmax_loss_categorical_crossentropy.hpp index 6bec961..84a50c6 100644 --- a/include/neural_network/activation_loss/activation_softmax_loss_categorical_crossentropy.hpp +++ b/include/neural_network/activation_loss/activation_softmax_loss_categorical_crossentropy.hpp @@ -92,7 +92,7 @@ struct activation_softmax_loss_categorical_crossentropy: loss{ * @param y_true Vector of true label of data. * */ - bool forward(const panic::tensor::real_matrix& y_pred, const panic::tensor::uint_vector& y_true); + bool calculate(const panic::tensor::real_matrix& y_pred, const panic::tensor::uint_vector& y_true) override; /** * @brief forward function to calculate losses @@ -103,7 +103,7 @@ struct activation_softmax_loss_categorical_crossentropy: loss{ * @Note Overloaded if one-shot endcoded * is used. */ - bool forward(const panic::tensor::real_matrix& y_pred, const panic::tensor::real_matrix& y_true); + bool calculate(const panic::tensor::real_matrix& y_pred, const panic::tensor::real_matrix& y_true) override; diff --git a/include/neural_network/loss/loss.hpp b/include/neural_network/loss/loss.hpp index ff8c573..e710182 100644 --- a/include/neural_network/loss/loss.hpp +++ b/include/neural_network/loss/loss.hpp @@ -73,6 +73,11 @@ struct loss{ */ panic::tensor::real_matrix dinputs; + /** + * @brief Matrix for output of loss function + */ + panic::tensor::real_matrix outputs; + /** * @brief Default de-constructor diff --git a/include/neural_network/loss/loss_categorical_crossentropy.hpp b/include/neural_network/loss/loss_categorical_crossentropy.hpp index 15710af..5a98b34 100644 --- a/include/neural_network/loss/loss_categorical_crossentropy.hpp +++ b/include/neural_network/loss/loss_categorical_crossentropy.hpp @@ -92,7 +92,7 @@ struct loss_categorical_crossentropy: loss{ */ bool backward( const panic::tensor::real_matrix& dvalues, - const panic::tensor::uint_vector& y_true); + const panic::tensor::uint_vector& y_true) override; /** * @brief backward function to calculate from losses @@ -105,7 +105,7 @@ struct loss_categorical_crossentropy: loss{ */ bool backward( const panic::tensor::real_matrix& dvalues, - const panic::tensor::real_matrix& y_true); + const panic::tensor::real_matrix& y_true) override; }; diff --git a/src/neural_network/activation_loss/activation_softmax_loss_categorical_crossentropy.cpp b/src/neural_network/activation_loss/activation_softmax_loss_categorical_crossentropy.cpp index bf7391a..7fe8edf 100644 --- a/src/neural_network/activation_loss/activation_softmax_loss_categorical_crossentropy.cpp +++ b/src/neural_network/activation_loss/activation_softmax_loss_categorical_crossentropy.cpp @@ -70,65 +70,6 @@ namespace panic{ activation_softmax_loss_categorical_crossentropy::activation_softmax_loss_categorical_crossentropy() { } - -//-------------------------------------------------------------------------------------------------------------------------- -// Function Name : panic::neural_network::activation_softmax_loss_categorical_crossentropy.forward -// -// Description: -// Calculated the forward pass -//-------------------------------------------------------------------------------------------------------------------------- -bool activation_softmax_loss_categorical_crossentropy::forward(const panic::tensor::real_matrix& y_pred, const panic::tensor::uint_vector& y_true){ - - // Output layers activation function - if (!activation.forward(y_pred)){ - return false; - } - // Set the output - outputs = activation.outputs; - - // calculate the loss value. - if (!loss.calculate(outputs, y_true)){ - return false; - } - - return true; -} - -//-------------------------------------------------------------------------------------------------------------------------- -// Function Name : panic::neural_network::activation_softmax_loss_categorical_crossentropy.forward -// -// Description: -// Calculated the forward pass -//-------------------------------------------------------------------------------------------------------------------------- -bool activation_softmax_loss_categorical_crossentropy::forward(const panic::tensor::real_matrix& y_pred, const panic::tensor::real_matrix& y_true){ - - // Output layers activation function - if (!activation.forward(y_pred)){ - return false; - } - // Set the output - outputs = activation.outputs; - - // calculate the loss value. - if (!loss.calculate(outputs, y_true)){ - return false; - } - - return true; -} - - - - - - - - - - - - - //-------------------------------------------------------------------------------------------------------------------------- // Function Name : panic::neural_network::activation_softmax_loss_categorical_crossentropy.calculate // diff --git a/src/neural_network/loss/loss.cpp b/src/neural_network/loss/loss.cpp index 7e89592..8e1104e 100644 --- a/src/neural_network/loss/loss.cpp +++ b/src/neural_network/loss/loss.cpp @@ -77,7 +77,10 @@ bool loss::calculate( // Calculate mean loss data_loss = panic::math::mean(sample_losses); - //return calculate_mean(); + // This is so the model can use every loss functions + // It's a problem to get the output when useing an activation+loss function + outputs = y_pred; + return true; } @@ -96,6 +99,11 @@ bool loss::calculate( } data_loss = panic::math::mean(sample_losses); + + + // This is so the model can use every loss functions + // It's a problem to get the output when useing an activation+loss function + outputs = y_pred; return true; } @@ -127,38 +135,6 @@ bool loss::forward( return false; } -/* - -//-------------------------------------------------------------------------------------------------------------------------- -// Function Name : panic::neural_network::loss::calculate_mean -// -// Description: -// Calculates the average of all sample loss values. -//-------------------------------------------------------------------------------------------------------------------------- -bool loss::calculate_mean(){ - - if (sample_losses.size() == 0){ - return false; - } - - panic::types::real_t sum = - static_cast(0); - - for ( - panic::types::uint_t i = 0; - i < sample_losses.size(); - ++i - ){ - sum += sample_losses[i]; - } - - data_loss = - sum / - static_cast(sample_losses.size()); - - return true; -} -*/ } // namespace tensor } // namespace panic diff --git a/src/neural_network/model/model.cpp b/src/neural_network/model/model.cpp index db12228..3266b68 100644 --- a/src/neural_network/model/model.cpp +++ b/src/neural_network/model/model.cpp @@ -450,7 +450,7 @@ bool model::train(const panic::tensor::real_matrix& X_train, } - prediction = panic::math::argmax_rowwise(outputs); + prediction = panic::math::argmax_rowwise(loss_function->outputs); comparisons = panic::math::equal(prediction, y_train); @@ -463,6 +463,8 @@ bool model::train(const panic::tensor::real_matrix& X_train, } + loss_function.backward(loss_function.outputs, y_train); + //backward(); //optimize();