MagmaDNN  1.0
c++NeuralNetworkFramework
dropoutop.h
1 
2 #pragma once
3 
4 #include "compute/operation.h"
5 #include "tensor/tensor.h"
6 #include "math/dropout.h"
7 
8 #if defined(_HAS_CUDA_)
9 #include "cudnn.h"
10 #endif
11 
12 namespace magmadnn {
13 namespace op {
14 
15 template <typename T>
16 class DropoutOp : public Operation<T> {
17 public:
18  DropoutOp(Operation<T> *input, float dropout_rate, unsigned long long seed, bool copy=true, bool needs_grad=true);
19 
20  virtual ~DropoutOp();
21 
22  std::string to_string() { return "Dropout(" + input->to_string() + ")"; }
23 
24 protected:
25  Tensor<T> *_eval(bool recompute);
27 
28  Operation<T> *input;
29  Tensor<T> *input_tensor;
30 
31  Tensor<T> *mask_tensor;
32 
33  float dropout_rate;
34  unsigned long long seed;
35 
36  #if defined(_HAS_CUDA_)
37  void init_settings();
38 
39  math::cudnn_dropout_settings_t settings;
40  math::cudnn_dropout_grad_settings_t grad_settings;
41  math::cudnn_dropout_shared_settings_t shared_settings;
42  #endif
43 
44  bool copy;
45 
46 };
47 
48 template <typename T>
49 DropoutOp<T>* dropout(Operation<T> *input, float dropout_rate, unsigned long long seed, bool copy=true, bool needs_grad=true);
50 
51 } // namespace op
52 } // namespace magmadnn
std::string to_string()
Definition: dropoutop.h:22
Definition: addop.cpp:11
Definition: dropoutop.h:16
Definition: tensor.h:34
Tensor< T > * _grad(Operation< T > *consumer, Operation< T > *var, Tensor< T > *grad)
Definition: dropoutop.cpp:56
Tensor< T > * _eval(bool recompute)
Definition: dropoutop.cpp:38
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