29 #include "tiny_dnn/layers/layer.h"
30 #include "tiny_dnn/core/params/conv_params.h"
31 #include "tiny_dnn/core/params/deconv_params.h"
32 #include "tiny_dnn/core/params/maxpool_params.h"
33 #include "tiny_dnn/core/params/fully_params.h"
41 enum class backend_t {
internal, nnpack, libdnn, avx, opencl };
43 inline std::ostream& operator << (std::ostream& os, backend_t type) {
45 case backend_t::internal: os <<
"Internal";
break;
46 case backend_t::nnpack: os <<
"NNPACK";
break;
47 case backend_t::libdnn: os <<
"LibDNN";
break;
48 case backend_t::avx: os <<
"AVX";
break;
49 case backend_t::opencl: os <<
"OpenCL";
break;
51 throw nn_error(
"Not supported ostream enum.");
59 inline backend_t default_engine() {
61 #if defined(__AVX__) || defined(__AVX2__)
62 return backend_t::avx;
65 return backend_t::internal;
72 explicit backend(context* ctx_ =
nullptr) {}
76 virtual void conv2d(
const std::vector<tensor_t*>& in_data,
77 std::vector<tensor_t*>& out_data) = 0;
79 virtual void conv2d_q(
const std::vector<tensor_t*>& in_data,
80 std::vector<tensor_t*>& out_data) = 0;
82 virtual void conv2d_eq(
const std::vector<tensor_t*>& in_data,
83 std::vector<tensor_t*>& out_data) = 0;
85 virtual void conv2d(
const std::vector<tensor_t*>& in_data,
86 const std::vector<tensor_t*>& out_data,
87 std::vector<tensor_t*>& out_grad,
88 std::vector<tensor_t*>& in_grad) = 0;
90 virtual void conv2d_q(
const std::vector<tensor_t*>& in_data,
91 const std::vector<tensor_t*>& out_data,
92 std::vector<tensor_t*>& out_grad,
93 std::vector<tensor_t*>& in_grad) = 0;
95 virtual void deconv2d(
const std::vector<tensor_t*>& in_data,
96 std::vector<tensor_t*>& out_data) = 0;
98 virtual void deconv2d_q(
const std::vector<tensor_t*>& in_data,
99 std::vector<tensor_t*>& out_data) = 0;
101 virtual void deconv2d_eq(
const std::vector<tensor_t*>& in_data,
102 std::vector<tensor_t*>& out_data) = 0;
104 virtual void deconv2d(
const std::vector<tensor_t*>& in_data,
105 const std::vector<tensor_t*>& out_data,
106 std::vector<tensor_t*>& out_grad,
107 std::vector<tensor_t*>& in_grad) = 0;
109 virtual void deconv2d_q(
const std::vector<tensor_t*>& in_data,
110 const std::vector<tensor_t*>& out_data,
111 std::vector<tensor_t*>& out_grad,
112 std::vector<tensor_t*>& in_grad) = 0;
114 virtual void maxpool(
const std::vector<tensor_t*>& in_data,
115 std::vector<tensor_t*>& out_data) = 0;
117 virtual void maxpool(
const std::vector<tensor_t*>& in_data,
118 const std::vector<tensor_t*>& out_data,
119 std::vector<tensor_t*>& out_grad,
120 std::vector<tensor_t*>& in_grad) = 0;
122 virtual void fully(
const std::vector<tensor_t*>& in_data,
123 std::vector<tensor_t*>& out_data) = 0;
125 virtual void fully_q(
const std::vector<tensor_t*>& in_data,
126 std::vector<tensor_t*>& out_data) = 0;
128 virtual void fully_eq(
const std::vector<tensor_t*>& in_data,
129 std::vector<tensor_t*>& out_data) = 0;
131 virtual void fully(
const std::vector<tensor_t*>& in_data,
132 const std::vector<tensor_t*>& out_data,
133 std::vector<tensor_t*>& out_grad,
134 std::vector<tensor_t*>& in_grad) = 0;
136 virtual void fully_q(
const std::vector<tensor_t*>& in_data,
137 const std::vector<tensor_t*>& out_data,
138 std::vector<tensor_t*>& out_grad,
139 std::vector<tensor_t*>& in_grad) = 0;
141 context* get_context()
const {
return ctx_; }
145 virtual backend_t type()
const = 0;
base class of all kind of NN layers
Definition: layer.h:62