MagmaDNN  1.0
c++NeuralNetworkFramework
addop.h
Go to the documentation of this file.
1 
9 #pragma once
10 #include <vector>
11 #include "compute/operation.h"
12 #include "tensor/tensor.h"
13 #include "geadd_internal.h"
14 
15 namespace magmadnn {
16 namespace op {
17 
21 template <typename T>
22 class AddOp : public Operation<T> {
23 public:
30  AddOp(Operation<T>* a, Operation<T>* b, bool copy=true, bool needs_grad=true);
31 
32 
33  std::string to_string() { return "(" + a->to_string() + " + " + b->to_string() + ")"; }
34 protected:
35  Tensor<T> *_eval(bool recompute=true);
37 
38  Operation<T>* a;
39  Operation<T>* b;
40 
41  Tensor<T> *a_tensor;
42  Tensor<T> *b_tensor;
43 
44  bool copy;
45 };
46 
54 template <typename T>
55 AddOp<T>* add(Operation<T> *a, Operation<T> *b, bool copy=true, bool needs_grad=true);
56 
57 } // namespace op
58 } // namespace magmadnn
Tensor< T > * _eval(bool recompute=true)
Definition: addop.cpp:35
Definition: addop.h:22
AddOp(Operation< T > *a, Operation< T > *b, bool copy=true, bool needs_grad=true)
Definition: addop.cpp:15
Definition: addop.cpp:11
Definition: tensor.h:34
std::string to_string()
Definition: addop.h:33
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: addop.cpp:55
Definition: operation.h:18
Variable< T > * var(std::string name, Tensor< T > *val)
Definition: variable.cpp:73