diff --git a/MLPP/Activation/Activation.cpp b/MLPP/Activation/Activation.cpp index e5483aa..45584e0 100644 --- a/MLPP/Activation/Activation.cpp +++ b/MLPP/Activation/Activation.cpp @@ -532,76 +532,32 @@ namespace MLPP{ } std::vector Activation::sinh(std::vector z, bool deriv){ - if(deriv){ - std::vector deriv; - deriv.resize(z.size()); - for(int i = 0; i < z.size(); i++){ - deriv[i] = sinh(z[i], 1); - } - return deriv; - } - std::vector a; - a.resize(z.size()); - for(int i = 0; i < z.size(); i++){ - a[i] = sinh(z[i]); - } - return a; + if(deriv){ return cosh(z); } + LinAlg alg; + return alg.scalarMultiply(0.5, alg.subtraction(alg.exp(z), alg.exp(alg.scalarMultiply(-1, z)))); } std::vector> Activation::sinh(std::vector> z, bool deriv){ - if(deriv){ - std::vector> deriv; - deriv.resize(z.size()); - for(int i = 0; i < z.size(); i++){ - deriv[i] = sinh(z[i], 1); - } - return deriv; - } - std::vector> a; - a.resize(z.size()); - for(int i = 0; i < z.size(); i++){ - a[i] = sinh(z[i]); - } - return a; + if(deriv){ return cosh(z); } + LinAlg alg; + return alg.scalarMultiply(0.5, alg.subtraction(alg.exp(z), alg.exp(alg.scalarMultiply(-1, z)))); } double Activation::cosh(double z, bool deriv){ - if(deriv){ return cosh(z); } + if(deriv){ return sinh(z); } return 0.5 * (exp(z) + exp(-z)); } std::vector Activation::cosh(std::vector z, bool deriv){ - if(deriv){ - std::vector deriv; - deriv.resize(z.size()); - for(int i = 0; i < z.size(); i++){ - deriv[i] = sinh(z[i], 1); - } - return deriv; - } - std::vector a; - a.resize(z.size()); - for(int i = 0; i < z.size(); i++){ - a[i] = cosh(z[i]); - } - return a; + if(deriv){ return sinh(z); } + LinAlg alg; + return alg.scalarMultiply(0.5, alg.addition(alg.exp(z), alg.exp(alg.scalarMultiply(-1, z)))); } std::vector> Activation::cosh(std::vector> z, bool deriv){ - if(deriv){ - std::vector> deriv; - deriv.resize(z.size()); - for(int i = 0; i < z.size(); i++){ - deriv[i] = cosh(z[i], 1); - } - return deriv; - } - std::vector> a; - a.resize(z.size()); - for(int i = 0; i < z.size(); i++){ - a[i] = cosh(z[i]); - } - return a; + if(deriv){ return sinh(z); } + LinAlg alg; + return alg.scalarMultiply(0.5, alg.addition(alg.exp(z), alg.exp(alg.scalarMultiply(-1, z)))); } double Activation::tanh(double z, bool deriv){ diff --git a/a.out b/a.out index e791741..3573674 100755 Binary files a/a.out and b/a.out differ diff --git a/main.cpp b/main.cpp index 1fff15d..6e25d80 100644 --- a/main.cpp +++ b/main.cpp @@ -350,16 +350,16 @@ int main() { // Testing for new Functions double z_s = 4; - std::cout << avn.swish(z_s) << std::endl; - std::cout << avn.swish(z_s, 1) << std::endl; + std::cout << avn.sinh(z_s) << std::endl; + std::cout << avn.sinh(z_s, 1) << std::endl; std::vector z_v = {4, 5}; - alg.printVector(avn.swish(z_v)); - alg.printVector(avn.swish(z_v, 1)); + alg.printVector(avn.sinh(z_v)); + alg.printVector(avn.sinh(z_v, 1)); std::vector> Z_m = {{4, 5}}; - alg.printMatrix(avn.swish(Z_m)); - alg.printMatrix(avn.swish(Z_m, 1)); + alg.printMatrix(avn.sinh(Z_m)); + alg.printMatrix(avn.sinh(Z_m, 1)); // alg.printMatrix(alg.pinverse({{1,2}, {3,4}}));