#ifndef MLPP_AUTO_ENCODER_H #define MLPP_AUTO_ENCODER_H // // AutoEncoder.hpp // // Created by Marc Melikyan on 11/4/20. // #include "core/math/math_defs.h" #include "core/object/reference.h" #include "../lin_alg/mlpp_matrix.h" #include "../lin_alg/mlpp_vector.h" #include "../regularization/reg.h" //REMOVE #include #include #include class MLPPAutoEncoder : public Reference { GDCLASS(MLPPAutoEncoder, Reference); public: Ref get_input_set(); void set_input_set(const Ref &val); int get_n_hidden(); void set_n_hidden(const int val); std::vector> model_set_test(std::vector> X); std::vector model_test(std::vector x); void gradient_descent(real_t learning_rate, int max_epoch, bool ui = false); void sgd(real_t learning_rate, int max_epoch, bool ui = false); void mbgd(real_t learning_rate, int max_epoch, int mini_batch_size, bool ui = false); real_t score(); void save(std::string fileName); MLPPAutoEncoder(std::vector> inputSet, int n_hidden); MLPPAutoEncoder(); ~MLPPAutoEncoder(); protected: real_t cost(std::vector> y_hat, std::vector> y); std::vector evaluatev(std::vector x); std::tuple, std::vector> propagatev(std::vector x); std::vector> evaluatem(std::vector> X); std::tuple>, std::vector>> propagatem(std::vector> X); void forward_pass(); static void _bind_methods(); std::vector> _input_set; std::vector> _y_hat; std::vector> _weights1; std::vector> _weights2; std::vector _bias1; std::vector _bias2; std::vector> _z2; std::vector> _a2; int _n; int _k; int _n_hidden; bool _initialized; }; #endif /* AutoEncoder_hpp */