MagmaDNN  1.0
c++NeuralNetworkFramework
conv2d.h
Go to the documentation of this file.
1 
9 #pragma once
10 
11 #include "tensor/tensor.h"
12 #include "utilities_internal.h"
13 
14 #if defined(_HAS_CUDA_)
15 #include "cudnn.h"
16 #endif
17 
18 namespace magmadnn {
19 namespace math {
20 
21 template <typename T>
22 void conv2d(Tensor<T> *x, Tensor<T> *w, Tensor<T> *out);
23 
24 template <typename T>
25 void conv2d_grad_data(Tensor<T> *w, Tensor<T> *grad, Tensor<T> *out);
26 
27 template <typename T>
28 void conv2d_grad_filter(Tensor<T> *x, Tensor<T> *grad, Tensor<T> *out);
29 
30 
31 
32 #if defined(_HAS_CUDA_)
33 
34 struct conv2d_cudnn_settings {
35  cudnnConvolutionDescriptor_t conv_desc;
36  cudnnConvolutionFwdAlgo_t algo;
37  cudnnConvolutionBwdDataAlgo_t bwd_data_algo;
38  cudnnConvolutionBwdFilterAlgo_t bwd_filter_algo;
39  cudnnFilterDescriptor_t filter_desc;
40  void *workspace;
41  size_t workspace_size;
42  void *grad_data_workspace;
43  size_t grad_data_workspace_size;
44  void *grad_filter_workspace;
45  size_t grad_filter_workspace_size;
46 };
47 
48 template <typename T>
49 void conv2d_device(Tensor<T> *x, Tensor<T> *w, Tensor<T> *out, conv2d_cudnn_settings settings);
50 
51 template <typename T>
52 void conv2d_grad_data_device(Tensor<T> *w, Tensor<T> *grad, Tensor<T> *out, conv2d_cudnn_settings settings);
53 
54 template <typename T>
55 void conv2d_grad_filter_device(Tensor<T> *x, Tensor<T> *grad, Tensor<T> *out, conv2d_cudnn_settings settings);
56 
57 #endif
58 
59 }
60 }
Definition: addop.cpp:11
Conv2dLayer< T > * conv2d(op::Operation< T > *input, const std::vector< unsigned int > &filter_shape, int out_channels, const std::vector< unsigned int > &padding, const std::vector< unsigned int > &strides, const std::vector< unsigned int > &dilation_rates, bool use_cross_correlation, bool use_bias, tensor_filler_t< T > filter_initializer, tensor_filler_t< T > bias_initializer)
Definition: conv2dlayer.cpp:91