MagmaDNN  1.0
c++NeuralNetworkFramework
conv2dlayer.h
Go to the documentation of this file.
1 
9 #pragma once
10 
11 #include <vector>
12 #include "layer/layer.h"
13 #include "tensor/tensor.h"
14 #include "compute/operation.h"
15 #include "compute/variable.h"
16 #include "compute/conv2dforward/conv2dforwardop.h"
17 
18 namespace magmadnn {
19 namespace layer {
20 
21 enum padding_t {
22  SAME,
23  VALID
24 };
25 
26 template <typename T>
27 class Conv2dLayer : public Layer<T> {
28 public:
29  Conv2dLayer(op::Operation<T> *input, const std::vector<unsigned int>& filter_shape={3, 3}, int out_channels=1, const std::vector<unsigned int>& padding={0,0},
30  const std::vector<unsigned int>& strides={1,1}, const std::vector<unsigned int>& dilation_rates={1,1}, bool use_cross_correlation=true, bool use_bias=false,
31  tensor_filler_t<T> filter_initializer={GLOROT,{0.0,0.2f}}, tensor_filler_t<T> bias_initializer={GLOROT,{0.0,0.2f}});
32 
33  virtual ~Conv2dLayer();
34 
35 
36  virtual std::vector<op::Operation<T> *> get_weights();
37 
38  op::Operation<T> *get_filter() { return filter; }
39  op::Operation<T> *get_bias() { return bias; }
40 
41 protected:
42  void init(const std::vector<unsigned int>& filter_shape);
43 
44  Tensor<T> *filter_tensor;
45  Tensor<T> *bias_tensor;
46 
47  op::Operation<T> *filter;
48  op::Operation<T> *bias;
49 
50  int in_channels, out_channels;
51  bool use_cross_correlation, use_bias;
52  int pad_h, pad_w, stride_h, stride_w, dilation_h, dilation_w;
53 
54  tensor_filler_t<T> filter_initializer, bias_initializer;
55 
56 };
57 
58 
73 template <typename T>
74 Conv2dLayer<T>* conv2d(op::Operation<T> *input, const std::vector<unsigned int>& filter_shape={3, 3}, int out_channels=1, const std::vector<unsigned int>& padding={0,0},
75  const std::vector<unsigned int>& strides={1,1}, const std::vector<unsigned int>& dilation_rates={1,1}, bool use_cross_correlation=true, bool use_bias=false,
76  tensor_filler_t<T> filter_initializer={GLOROT,{0.0,0.2f}}, tensor_filler_t<T> bias_initializer={GLOROT,{0.0,0.2f}});
77 
78 /* Indicate pooling type when creating */
79 template <typename T>
80 Conv2dLayer<T>* conv2d(op::Operation<T> *input, const std::vector<unsigned int>& filter_shape={3, 3}, int out_channels=1, layer::padding_t padding=layer::SAME,
81  const std::vector<unsigned int>& strides={1,1}, const std::vector<unsigned int>& dilation_rates={1,1}, bool use_cross_correlation=true, bool use_bias=false,
82  tensor_filler_t<T> filter_initializer={GLOROT,{0.0,0.2f}}, tensor_filler_t<T> bias_initializer={GLOROT,{0.0,0.2f}});
83 
84 } // layer
85 } // magmadnn
Definition: types.h:64
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
Definition: conv2dlayer.h:27
Definition: tensor.h:34
Definition: layer.h:18
Definition: operation.h:18