MagmaDNN  1.0
c++NeuralNetworkFramework
poolingop.h
1 
2 #pragma once
3 
4 #include "compute/operation.h"
5 #include "tensor/tensor.h"
6 #include "math/pooling.h"
7 
8 namespace magmadnn {
9 namespace op {
10 
11 template <typename T>
12 class PoolingOp : public Operation<T> {
13 public:
14  PoolingOp(Operation<T> *input, int filter_h = 0, int filter_w = 0, int pad_h=0, int pad_w=0, int vertical_stride=1, int horizontal_stride=1, pooling_mode mode=MAX_POOL, bool propagate_nan=false, bool needs_grad=true);
15  ~PoolingOp();
16 
17  std::string to_string() { return "Pooling(" + input->to_string() + ")"; }
18 protected:
19  Tensor<T> *_eval(bool recompute);
21 
22 
23  void init_settings();
24  void calculate_and_set_output_shape();
25 
26  Operation<T> *input;
27  Tensor<T> *input_tensor;
28 
29  int filter_h, filter_w, pad_h, pad_w, vertical_stride, horizontal_stride;
30  pooling_mode mode;
31  bool propagate_nan;
32 
33  #if defined(_HAS_CUDA_)
34  math::cudnn_pooling_settings_t settings;
35  #endif
36 
37 };
38 
39 template <typename T>
40 PoolingOp<T>* pooling(Operation<T> *input, int filter_h = 0, int filter_w = 0, int pad_h=0, int pad_w=0, int vertical_stride=1, int horizontal_stride=1, pooling_mode mode=MAX_POOL, bool propagate_nan=false, bool needs_grad=true);
41 
42 } // namespace op
43 } // namespace magmadnn
Definition: addop.cpp:11
Definition: tensor.h:34
Definition: poolingop.h:12
std::string to_string()
Definition: poolingop.h:17
Tensor< T > * _grad(Operation< T > *consumer, Operation< T > *var, Tensor< T > *grad)
Definition: poolingop.cpp:54
virtual Tensor< T > * grad(Operation< T > *consumer, Operation< T > *var, Tensor< T > *grad, bool recompute=true)
Definition: operation.h:93
virtual std::string to_string()=0
Definition: operation.h:18
Variable< T > * var(std::string name, Tensor< T > *val)
Definition: variable.cpp:73
Tensor< T > * _eval(bool recompute)
Definition: poolingop.cpp:37