layer.hpp 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #ifndef LAYER_HPP
  2. #define LAYER_HPP
  3. #include "debug.hpp"
  4. #include "vector.hpp"
  5. #include <cmath>
  6. namespace Layer{
  7. class Layer{
  8. public:
  9. size_t n_in,n_out;
  10. Vector x_in;
  11. Vector x_out;
  12. Vector delta;
  13. string name;
  14. public:
  15. Layer(size_t n);
  16. Layer(size_t n_in,size_t n_out);
  17. ~Layer();
  18. size_t get_input_size() const;
  19. size_t get_output_size() const;
  20. Vector get_output() const;
  21. virtual Vector feed_forward(Vector x)=0;
  22. virtual void init_nabla()=0;
  23. virtual Vector back_propagation(Vector d)=0;
  24. virtual void update(Real eta)=0;
  25. };
  26. inline
  27. Layer::Layer(size_t n){
  28. n_in=n;
  29. n_out=n;
  30. x_out=init_vector(n);
  31. delta=init_vector(n);
  32. }
  33. inline
  34. Layer::Layer(size_t n_in_,size_t n_out_){
  35. n_in=n_in_;
  36. n_out=n_out_;
  37. x_out=init_vector(n_out);
  38. delta=init_vector(n_in);
  39. }
  40. inline
  41. Layer::~Layer(){
  42. delete_vector(x_out);
  43. delete_vector(delta);
  44. }
  45. inline size_t
  46. Layer::get_input_size() const{
  47. return n_in;
  48. }
  49. inline size_t
  50. Layer::get_output_size() const{
  51. return n_out;
  52. }
  53. inline Vector
  54. Layer::get_output() const{
  55. return x_out;
  56. }
  57. }
  58. #endif