Neural
activation.h
Go to the documentation of this file.
1 #pragma once
2 #ifndef ACTIVATION_H
3 #define ACTIVATION_H
4 
5 #include <iostream>
6 #include <string>
7 #include <eigen3/Eigen/Dense>
8 #include <eigen3/Eigen/Jacobi>
9 
10 namespace Neural
11 {
12  class Activation {
13  public:
14  Activation() {};
15  virtual Eigen::MatrixXd Compute(Eigen::MatrixXd x) = 0;
16  virtual Eigen::MatrixXd ComputePrime(Eigen::MatrixXd x) = 0 ;
17  std::string getType(){
18  return this->m_type;
19  };
20  protected:
21  std::string m_type;
22  };
23 
24  class Than : public Activation {
25  public:
26  Than() {
27  m_type= "Than";
28  };
29  virtual Eigen::MatrixXd Compute(Eigen::MatrixXd x){
30  return x.array().tanh();
31  }
32  virtual Eigen::MatrixXd ComputePrime(Eigen::MatrixXd x){
33  return 1-x.array().tanh().pow(2);
34  }
35  };
36 
37  class Sigmoid : public Activation {
38  public:
39  Sigmoid() {
40  m_type= "Sigmoid";
41  };
42  virtual Eigen::MatrixXd Compute(Eigen::MatrixXd x){
43  return 1/(1+exp(-x.array()));
44  }
45  virtual Eigen::MatrixXd ComputePrime(Eigen::MatrixXd x){
46  return (1 / (1 + exp(-x.array()))) * (1 - (1 / (1 + exp(-x.array()))));
47  }
48  };
49 
50  class Softmax : public Activation {
51  public:
52  Softmax() {
53  m_type= "Softmax";
54  };
55  virtual Eigen::MatrixXd Compute(Eigen::MatrixXd x){
56  Eigen::MatrixXd expo = exp(x.array()-x.maxCoeff());
57  return expo/expo.sum();
58  }
59  virtual Eigen::MatrixXd ComputePrime(Eigen::MatrixXd x){
60  Eigen::MatrixXd exposum = (exp(x.array()-x.maxCoeff()))/(exp(x.array()-x.maxCoeff()).sum());
61  return exposum.array()*(1-exposum.array());
62  }
63  };
64 
65  class Relu : public Activation {
66  public:
67  Relu() {
68  m_type= "Relu";
69  };
70  virtual Eigen::MatrixXd Compute(Eigen::MatrixXd x){
71  return x.cwiseMax(0.0);
72  }
73  virtual Eigen::MatrixXd ComputePrime(Eigen::MatrixXd x){
74  for (int r(0); r<x.rows();r++){
75  for (int c(0); c<x.cols();c++){
76  if (x(r,c)<0){
77  x(r,c) = 0;
78  }
79  else{
80  x(r,c) = 1;
81  }
82  }
83  }
84  return x;
85  }
86  };
87 
88  class SoftPlus : public Activation {
89  public:
91  m_type = "SoftPlus";
92  };
93  virtual Eigen::MatrixXd Compute(Eigen::MatrixXd x){
94  return log(1+(exp(x.array()))); //y = log(1+exp(x)))
95  }
96  virtual Eigen::MatrixXd ComputePrime(Eigen::MatrixXd x){
97  return 1/(1+exp(-x.array())); //dy/dx = 1/(1+exp(-x))
98  }
99  };
100 
101  class LeakyRelu : public Activation {
102  public:
103  LeakyRelu(double a) {
104  m_type= "LeakyRelu";
105  m_alpha = a;
106  };
107 
108  double m_alpha;
109 
110  virtual Eigen::MatrixXd Compute(Eigen::MatrixXd x){
111  return x.cwiseMax(0.0);
112  }
113  virtual Eigen::MatrixXd ComputePrime(Eigen::MatrixXd x){
114  for (int r(0); r<x.rows();r++){
115  for (int c(0); c<x.cols();c++){
116  if (x(r,c)<=0){
117  x(r,c) = m_alpha;
118  }
119  else{
120  x(r,c) = 1;
121  }
122  }
123  }
124  return x;
125  }
126  };
127 }
128 #endif
Neural::Softmax
Definition: activation.h:50
Neural::Activation::ComputePrime
virtual Eigen::MatrixXd ComputePrime(Eigen::MatrixXd x)=0
Neural::Activation::getType
std::string getType()
Definition: activation.h:17
Neural::LeakyRelu::Compute
virtual Eigen::MatrixXd Compute(Eigen::MatrixXd x)
Definition: activation.h:110
Neural::SoftPlus::ComputePrime
virtual Eigen::MatrixXd ComputePrime(Eigen::MatrixXd x)
Definition: activation.h:96
Neural::Sigmoid::ComputePrime
virtual Eigen::MatrixXd ComputePrime(Eigen::MatrixXd x)
Definition: activation.h:45
Neural::Sigmoid::Sigmoid
Sigmoid()
Definition: activation.h:39
Neural::Than
Definition: activation.h:24
Neural::Relu::Relu
Relu()
Definition: activation.h:67
Neural::LeakyRelu
Definition: activation.h:101
Neural::Activation::Compute
virtual Eigen::MatrixXd Compute(Eigen::MatrixXd x)=0
Neural::Softmax::ComputePrime
virtual Eigen::MatrixXd ComputePrime(Eigen::MatrixXd x)
Definition: activation.h:59
Neural::Softmax::Compute
virtual Eigen::MatrixXd Compute(Eigen::MatrixXd x)
Definition: activation.h:55
Neural::Than::ComputePrime
virtual Eigen::MatrixXd ComputePrime(Eigen::MatrixXd x)
Definition: activation.h:32
Neural::SoftPlus::SoftPlus
SoftPlus()
Definition: activation.h:90
Neural::Sigmoid
Definition: activation.h:37
Neural::Relu
Definition: activation.h:65
Neural::Relu::ComputePrime
virtual Eigen::MatrixXd ComputePrime(Eigen::MatrixXd x)
Definition: activation.h:73
Neural::Relu::Compute
virtual Eigen::MatrixXd Compute(Eigen::MatrixXd x)
Definition: activation.h:70
Neural::Than::Compute
virtual Eigen::MatrixXd Compute(Eigen::MatrixXd x)
Definition: activation.h:29
Neural::Activation::Activation
Activation()
Definition: activation.h:14
Neural::Activation
Definition: activation.h:12
Neural::Activation::m_type
std::string m_type
Definition: activation.h:19
Neural::Softmax::Softmax
Softmax()
Definition: activation.h:52
Neural::Sigmoid::Compute
virtual Eigen::MatrixXd Compute(Eigen::MatrixXd x)
Definition: activation.h:42
Neural::LeakyRelu::m_alpha
double m_alpha
Definition: activation.h:106
Neural::LeakyRelu::ComputePrime
virtual Eigen::MatrixXd ComputePrime(Eigen::MatrixXd x)
Definition: activation.h:113
Neural::Than::Than
Than()
Definition: activation.h:26
Neural::SoftPlus::Compute
virtual Eigen::MatrixXd Compute(Eigen::MatrixXd x)
Definition: activation.h:93
Neural::SoftPlus
Definition: activation.h:88
Neural::LeakyRelu::LeakyRelu
LeakyRelu(double a)
Definition: activation.h:103
Neural
Definition: activation.h:10