From 318d8945eca700a67681768f485ba20adc86de74 Mon Sep 17 00:00:00 2001 From: sosokker Date: Sat, 26 Aug 2023 02:08:46 +0700 Subject: [PATCH] Update include path in utilscpp/ add train func/ Add header to include --- include/Layers/DenseLayer.hpp | 17 +++++++++++++++++ include/utils/utils.hpp | 20 ++++++++++++++++++++ src/utils/utils.cpp | 4 ++-- src/utils/utils.hpp | 20 ++++++++++++++++++++ 4 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 include/Layers/DenseLayer.hpp create mode 100644 include/utils/utils.hpp create mode 100644 src/utils/utils.hpp diff --git a/include/Layers/DenseLayer.hpp b/include/Layers/DenseLayer.hpp new file mode 100644 index 0000000..b2d30e4 --- /dev/null +++ b/include/Layers/DenseLayer.hpp @@ -0,0 +1,17 @@ +#include +#include "Layers.hpp" + +class DenseLayer : public Layer { +public: + DenseLayer(int input_size, int output_size); + + void forward(const Eigen::VectorXd& input) override; + void backward(const Eigen::VectorXd& output_gradient, double learning_rate) override; + + const Eigen::VectorXd& getOutput() const; + const Eigen::VectorXd& getInputGradient() const; + +private: + Eigen::MatrixXd weights; + Eigen::VectorXd bias; +}; diff --git a/include/utils/utils.hpp b/include/utils/utils.hpp new file mode 100644 index 0000000..678e996 --- /dev/null +++ b/include/utils/utils.hpp @@ -0,0 +1,20 @@ +#ifndef NEURAL_NETWORK_UTILS_HPP +#define NEURAL_NETWORK_UTILS_HPP + +#include +#include +#include +#include + +Eigen::VectorXd predict(const std::vector& network, const Eigen::VectorXd& input); + +void train(std::vector& network, + const std::function& loss, + const std::function& loss_prime, + const std::vector& x_train, + const std::vector& y_train, + int epochs = 1000, + double learning_rate = 0.01, + bool verbose = true); + +#endif // NEURAL_NETWORK_UTILS_HPP diff --git a/src/utils/utils.cpp b/src/utils/utils.cpp index c853a7a..28f1c33 100644 --- a/src/utils/utils.cpp +++ b/src/utils/utils.cpp @@ -1,8 +1,8 @@ #include #include #include -#include -#include +#include "../../include/Eigen/Dense" +#include "../Layers/Layers.hpp" Eigen::VectorXd predict(const std::vector& network, const Eigen::VectorXd& input) { Eigen::VectorXd output = input; diff --git a/src/utils/utils.hpp b/src/utils/utils.hpp new file mode 100644 index 0000000..01b8261 --- /dev/null +++ b/src/utils/utils.hpp @@ -0,0 +1,20 @@ +#ifndef NEURAL_NETWORK_UTILS_HPP +#define NEURAL_NETWORK_UTILS_HPP + +#include +#include +#include "../../include/Eigen/Dense" +#include "../Layers/Layers.hpp" + +Eigen::VectorXd predict(const std::vector& network, const Eigen::VectorXd& input); + +void train(std::vector& network, + const std::function& loss, + const std::function& loss_prime, + const std::vector& x_train, + const std::vector& y_train, + int epochs = 1000, + double learning_rate = 0.01, + bool verbose = true); + +#endif // NEURAL_NETWORK_UTILS_HPP