Update include path in utilscpp/ add train func/ Add header to include

This commit is contained in:
sosokker 2023-08-26 02:08:46 +07:00
parent c168208b49
commit 318d8945ec
4 changed files with 59 additions and 2 deletions

View File

@ -0,0 +1,17 @@
#include <Eigen/Dense>
#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;
};

20
include/utils/utils.hpp Normal file
View File

@ -0,0 +1,20 @@
#ifndef NEURAL_NETWORK_UTILS_HPP
#define NEURAL_NETWORK_UTILS_HPP
#include <vector>
#include <functional>
#include <Eigen/Dense>
#include <Layers/Layers.hpp>
Eigen::VectorXd predict(const std::vector<Layer*>& network, const Eigen::VectorXd& input);
void train(std::vector<Layer*>& network,
const std::function<Eigen::VectorXd(const Eigen::VectorXd&, const Eigen::VectorXd&)>& loss,
const std::function<Eigen::VectorXd(const Eigen::VectorXd&, const Eigen::VectorXd&)>& loss_prime,
const std::vector<Eigen::VectorXd>& x_train,
const std::vector<Eigen::VectorXd>& y_train,
int epochs = 1000,
double learning_rate = 0.01,
bool verbose = true);
#endif // NEURAL_NETWORK_UTILS_HPP

View File

@ -1,8 +1,8 @@
#include <iostream>
#include <vector>
#include <functional>
#include <Eigen/Dense>
#include <Layers/Layers.hpp>
#include "../../include/Eigen/Dense"
#include "../Layers/Layers.hpp"
Eigen::VectorXd predict(const std::vector<Layer*>& network, const Eigen::VectorXd& input) {
Eigen::VectorXd output = input;

20
src/utils/utils.hpp Normal file
View File

@ -0,0 +1,20 @@
#ifndef NEURAL_NETWORK_UTILS_HPP
#define NEURAL_NETWORK_UTILS_HPP
#include <vector>
#include <functional>
#include "../../include/Eigen/Dense"
#include "../Layers/Layers.hpp"
Eigen::VectorXd predict(const std::vector<Layer*>& network, const Eigen::VectorXd& input);
void train(std::vector<Layer*>& network,
const std::function<Eigen::VectorXd(const Eigen::VectorXd&, const Eigen::VectorXd&)>& loss,
const std::function<Eigen::VectorXd(const Eigen::VectorXd&, const Eigen::VectorXd&)>& loss_prime,
const std::vector<Eigen::VectorXd>& x_train,
const std::vector<Eigen::VectorXd>& y_train,
int epochs = 1000,
double learning_rate = 0.01,
bool verbose = true);
#endif // NEURAL_NETWORK_UTILS_HPP