MagmaDNN  1.0
c++NeuralNetworkFramework
dropout.h
Go to the documentation of this file.
1 
9 #pragma once
10 
11 #include "tensor/tensor.h"
12 #include "math/product.h"
13 #include "utilities_internal.h"
14 #include "types.h"
15 
16 #if defined(_HAS_CUDA_)
17 #include "cudnn.h"
18 #endif
19 
20 namespace magmadnn {
21 namespace math {
22 
23 #if defined(_HAS_CUDA_)
24 struct cudnn_dropout_settings_t {
25  cudnnHandle_t handle;
26  cudnnTensorDescriptor_t xdesc;
27  cudnnTensorDescriptor_t ydesc;
28 };
29 
30 struct cudnn_dropout_grad_settings_t {
31  cudnnHandle_t handle;
32  cudnnTensorDescriptor_t dxdesc;
33  cudnnTensorDescriptor_t dydesc;
34 };
35 
36 struct cudnn_dropout_shared_settings_t {
37  cudnnDropoutDescriptor_t dropoutDesc;
38  void *states;
39  void *reserveSpace;
40  size_t stateSizeInBytes;
41  size_t reserveSpaceSizeInBytes;
42 };
43 #endif
44 
45 template <typename T>
46 void dropout(Tensor<T> *x, Tensor<T> *out, Tensor<T> *mask, float dropout_rate);
47 
48 template <typename T>
49 void dropout_grad(Tensor<T> *grad, Tensor<T> *out, Tensor<T> *mask);
50 
51 #if defined(_HAS_CUDA_)
52 template <typename T>
53 void dropout_device(Tensor<T> *x, Tensor<T> *out, cudnn_dropout_settings_t settings, cudnn_dropout_shared_settings_t shared);
54 
55 template <typename T>
56 void dropout_grad_device(Tensor<T> *grad, Tensor<T> *out, cudnn_dropout_grad_settings_t settings, cudnn_dropout_shared_settings_t shared);
57 #endif
58 
59 }
60 }
Definition: addop.cpp:11