convolution.hpp 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #ifndef LAYER_CONVOLUTION_HPP
  2. #define LAYER_CONVOLUTION_HPP
  3. #include <random>
  4. #include "layer.hpp"
  5. namespace Layer{
  6. /*****************************************
  7. * Implementation of a convolutionnal Layer
  8. */
  9. class Convolution:public Layer{
  10. public:
  11. size_t nf,ni,nj;
  12. size_t mf,mi,mj;
  13. size_t p,q;
  14. Vector K;
  15. Vector b;
  16. Vector nabla_K;
  17. Vector nabla_b;
  18. public:
  19. Convolution(size_t nf,size_t ni,size_t nj,size_t p,size_t q,size_t mf);
  20. ~Convolution();
  21. void init(Real m,Real d);
  22. Vector feed_forward(Vector x);
  23. void init_nabla();
  24. Vector back_propagation(Vector d);
  25. void update(Real eta);
  26. };
  27. inline Convolution::Convolution(size_t nf_,size_t ni_,size_t nj_,size_t p_,size_t q_,size_t mf_):Layer(nf_*ni_*nj_,mf_*(ni_-p_+1)*(nj_-q_+1)){
  28. nf=nf_;
  29. ni=ni_;
  30. nj=nj_;
  31. p=p_;
  32. q=q_;
  33. mf=mf_;
  34. mi=ni-p+1;
  35. mj=nj-q+1;
  36. K=init_vector(mf*nf*p*q);
  37. b=init_vector(mf*nf);
  38. nabla_K=init_vector(mf*nf*p*q);
  39. nabla_b=init_vector(mf*nf);
  40. }
  41. inline
  42. Convolution::~Convolution(){
  43. delete_vector(K);
  44. delete_vector(b);
  45. delete_vector(nabla_K);
  46. delete_vector(nabla_b);
  47. }
  48. }
  49. #endif