mirror of
https://github.com/Relintai/MLPP.git
synced 2025-03-12 18:08:59 +01:00
"Vectorized" arcoth
This commit is contained in:
parent
8a57f5af25
commit
c69693b86b
@ -704,38 +704,14 @@ namespace MLPP{
|
|||||||
|
|
||||||
std::vector<double> Activation::arsech(std::vector<double> z, bool deriv){
|
std::vector<double> Activation::arsech(std::vector<double> z, bool deriv){
|
||||||
LinAlg alg;
|
LinAlg alg;
|
||||||
if(deriv){
|
if(deriv){ return alg.elementWiseDivision(alg.full(z.size(), -1), alg.hadamard_product(z, alg.exponentiate(alg.subtraction(alg.onevec(z.size()), alg.hadamard_product(z, z)), 0.5))); }
|
||||||
std::vector<double> deriv;
|
return alg.log(alg.addition(alg.elementWiseDivision(alg.onevec(z.size()), z), alg.hadamard_product(alg.addition(alg.elementWiseDivision(alg.onevec(z.size()), z), alg.onevec(z.size())), alg.subtraction(alg.elementWiseDivision(alg.onevec(z.size()), z), alg.onevec(z.size())))));
|
||||||
deriv.resize(z.size());
|
|
||||||
for(int i = 0; i < z.size(); i++){
|
|
||||||
deriv[i] = arsech(z[i], 1);
|
|
||||||
}
|
|
||||||
return deriv;
|
|
||||||
}
|
|
||||||
std::vector<double> a;
|
|
||||||
a.resize(z.size());
|
|
||||||
for(int i = 0; i < z.size(); i++){
|
|
||||||
a[i] = arsech(z[i]);
|
|
||||||
}
|
|
||||||
return a;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::vector<double>> Activation::arsech(std::vector<std::vector<double>> z, bool deriv){
|
std::vector<std::vector<double>> Activation::arsech(std::vector<std::vector<double>> z, bool deriv){
|
||||||
LinAlg alg;
|
LinAlg alg;
|
||||||
if(deriv){
|
if(deriv){ return alg.elementWiseDivision(alg.full(z.size(), z[0].size(), -1), alg.hadamard_product(z, alg.exponentiate(alg.subtraction(alg.onemat(z.size(), z[0].size()), alg.hadamard_product(z, z)), 0.5))); }
|
||||||
std::vector<std::vector<double>> deriv;
|
return alg.log(alg.addition(alg.elementWiseDivision(alg.onemat(z.size(), z[0].size()), z), alg.hadamard_product(alg.addition(alg.elementWiseDivision(alg.onemat(z.size(), z[0].size()), z), alg.onemat(z.size(), z[0].size())), alg.subtraction(alg.elementWiseDivision(alg.onemat(z.size(), z[0].size()), z), alg.onemat(z.size(), z[0].size())))));
|
||||||
deriv.resize(z.size());
|
|
||||||
for(int i = 0; i < z.size(); i++){
|
|
||||||
deriv[i] = arsech(z[i], 1);
|
|
||||||
}
|
|
||||||
return deriv;
|
|
||||||
}
|
|
||||||
std::vector<std::vector<double>> a;
|
|
||||||
a.resize(z.size());
|
|
||||||
for(int i = 0; i < z.size(); i++){
|
|
||||||
a[i] = arsech(z[i]);
|
|
||||||
}
|
|
||||||
return a;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
double Activation::arcoth(double z, bool deriv){
|
double Activation::arcoth(double z, bool deriv){
|
||||||
@ -745,40 +721,16 @@ namespace MLPP{
|
|||||||
return 0.5 * log((1 + z)/(z - 1));
|
return 0.5 * log((1 + z)/(z - 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::vector<double>> Activation::arcoth(std::vector<std::vector<double>> z, bool deriv){
|
|
||||||
LinAlg alg;
|
|
||||||
if(deriv){
|
|
||||||
std::vector<std::vector<double>> deriv;
|
|
||||||
deriv.resize(z.size());
|
|
||||||
for(int i = 0; i < z.size(); i++){
|
|
||||||
deriv[i] = arcoth(z[i], 1);
|
|
||||||
}
|
|
||||||
return deriv;
|
|
||||||
}
|
|
||||||
std::vector<std::vector<double>> a;
|
|
||||||
a.resize(z.size());
|
|
||||||
for(int i = 0; i < z.size(); i++){
|
|
||||||
a[i] = arcoth(z[i]);
|
|
||||||
}
|
|
||||||
return a;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::vector<double> Activation::arcoth(std::vector<double> z, bool deriv){
|
std::vector<double> Activation::arcoth(std::vector<double> z, bool deriv){
|
||||||
LinAlg alg;
|
LinAlg alg;
|
||||||
if(deriv){
|
if(deriv){ return alg.elementWiseDivision(alg.onevec(z.size()), alg.subtraction(alg.onevec(z.size()), alg.hadamard_product(z, z))); }
|
||||||
std::vector<double> deriv;
|
return alg.scalarMultiply(0.5, alg.log(alg.elementWiseDivision(alg.addition(alg.onevec(z.size()), z), alg.subtraction(z, alg.onevec(z.size())))));
|
||||||
deriv.resize(z.size());
|
|
||||||
for(int i = 0; i < z.size(); i++){
|
|
||||||
deriv[i] = arcoth(z[i], 1);
|
|
||||||
}
|
}
|
||||||
return deriv;
|
|
||||||
}
|
std::vector<std::vector<double>> Activation::arcoth(std::vector<std::vector<double>> z, bool deriv){
|
||||||
std::vector<double> a;
|
LinAlg alg;
|
||||||
a.resize(z.size());
|
if(deriv){ return alg.elementWiseDivision(alg.onemat(z.size(), z[0].size()), alg.subtraction(alg.onemat(z.size(), z[0].size()), alg.hadamard_product(z, z))); }
|
||||||
for(int i = 0; i < z.size(); i++){
|
return alg.scalarMultiply(0.5, alg.log(alg.elementWiseDivision(alg.addition(alg.onemat(z.size(), z[0].size()), z), alg.subtraction(z, alg.onemat(z.size(), z[0].size())))));
|
||||||
a[i] = arcoth(z[i]);
|
|
||||||
}
|
|
||||||
return a;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TO DO: Implement this template activation
|
// TO DO: Implement this template activation
|
||||||
|
12
main.cpp
12
main.cpp
@ -350,16 +350,16 @@ int main() {
|
|||||||
|
|
||||||
// // Testing new Functions
|
// // Testing new Functions
|
||||||
// double z_s = 0.001;
|
// double z_s = 0.001;
|
||||||
// std::cout << avn.arcsch(z_s) << std::endl;
|
// std::cout << avn.arcoth(z_s) << std::endl;
|
||||||
// std::cout << avn.arcsch(z_s, 1) << std::endl;
|
// std::cout << avn.arcoth(z_s, 1) << std::endl;
|
||||||
|
|
||||||
// std::vector<double> z_v = {0.001, 5};
|
// std::vector<double> z_v = {0.001, 5};
|
||||||
// alg.printVector(avn.arcsch(z_v));
|
// alg.printVector(avn.arcoth(z_v));
|
||||||
// alg.printVector(avn.arcsch(z_v, 1));
|
// alg.printVector(avn.arcoth(z_v, 1));
|
||||||
|
|
||||||
// std::vector<std::vector<double>> Z_m = {{0.001, 5}};
|
// std::vector<std::vector<double>> Z_m = {{0.001, 5}};
|
||||||
// alg.printMatrix(avn.arcsch(Z_m));
|
// alg.printMatrix(avn.arcoth(Z_m));
|
||||||
// alg.printMatrix(avn.arcsch(Z_m, 1));
|
// alg.printMatrix(avn.arcoth(Z_m, 1));
|
||||||
|
|
||||||
// alg.printMatrix(alg.pinverse({{1,2}, {3,4}}));
|
// alg.printMatrix(alg.pinverse({{1,2}, {3,4}}));
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user