#pragma once #include "./core/omp_config.h" #include "./utils/vector.h" #include "./utils/matrix.h" #include "./numerics/vecmean.h" namespace neural_networks{ template struct Loss{ utils::Vector sample_losses; utils::Matrix dinputs; Td data_loss; virtual utils::Vector forward(const utils::Matrix& output, const utils::Matrix& y) = 0; virtual void backward(const utils::Matrix& dvalues, const utils::Matrix& y) = 0; Td calculate(const utils::Matrix& output, const utils::Matrix& y){ // Calculate sample losses sample_losses = forward(output, y); // Calculate mean loss data_loss = numerics::vecmean(sample_losses); return data_loss; } }; } // end namespace neural_networks