MagmaDNN  1.0
c++NeuralNetworkFramework
matmulop.h
Go to the documentation of this file.
1 
9 #pragma once
10 #include <vector>
11 #include "compute/operation.h"
12 #include "compute/variable.h"
13 #include "compute/dot/dotop.h"
14 #include "compute/transpose/transposeop.h"
15 #include "tensor/tensor.h"
16 #include "math/matmul.h"
17 #include "math/dot.h"
18 #include "gemm_internal.h"
19 
20 namespace magmadnn {
21 namespace op {
22 
23 template <typename T>
24 class MatmulOp : public Operation<T> {
25 public:
26  MatmulOp(T alpha, Operation<T>* a, Operation<T>* b, T beta, Operation<T> *c, bool copy=true, bool needs_grad=true);
27 
28 
29  std::string to_string() { return "(" + a->to_string() + " x " + b->to_string() + ")"; }
30 protected:
31  Tensor<T> *_eval(bool recompute=true);
33 
34  Operation<T> *a;
35  Operation<T> *b;
36  Operation<T> *c;
37 
38  Tensor<T> *a_tensor;
39  Tensor<T> *b_tensor;
40  Tensor<T> *c_tensor;
41 
42  T alpha;
43  T beta;
44  bool copy;
45 };
46 
54 template <typename T>
55 MatmulOp<T>* matmul(Operation<T> *a, Operation<T> *b, bool needs_grad=true);
56 
68 template <typename T>
69 MatmulOp<T>* matmul(T alpha, Operation<T> *a, Operation<T> *b, T beta, Tensor<T> *c, bool copy=true, bool needs_grad=true);
70 
71 } // namespace op
72 } // namespace magmadnn
Definition: addop.cpp:11
Tensor< T > * _eval(bool recompute=true)
Definition: matmulop.cpp:54
Definition: matmulop.h:24
std::string to_string()
Definition: matmulop.h:29
MatmulOp< T > * matmul(Operation< T > *a, Operation< T > *b, bool needs_grad)
Definition: matmulop.cpp:128
Definition: tensor.h:34
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
Tensor< T > * _grad(Operation< T > *consumer, Operation< T > *var, Tensor< T > *grad)
Definition: matmulop.cpp:72
Definition: operation.h:18
Variable< T > * var(std::string name, Tensor< T > *val)
Definition: variable.cpp:73