mirror of
https://github.com/Relintai/MLPP.git
synced 2025-02-10 16:10:06 +01:00
"Vectorized" artanh & arcsch
This commit is contained in:
parent
1b7a41d38b
commit
a84e38fc59
@ -665,38 +665,14 @@ namespace MLPP{
|
||||
|
||||
std::vector<double> Activation::artanh(std::vector<double> z, bool deriv){
|
||||
LinAlg alg;
|
||||
if(deriv){
|
||||
std::vector<double> deriv;
|
||||
deriv.resize(z.size());
|
||||
for(int i = 0; i < z.size(); i++){
|
||||
deriv[i] = artanh(z[i], 1);
|
||||
}
|
||||
return deriv;
|
||||
}
|
||||
std::vector<double> a;
|
||||
a.resize(z.size());
|
||||
for(int i = 0; i < z.size(); i++){
|
||||
a[i] = artanh(z[i]);
|
||||
}
|
||||
return a;
|
||||
if(deriv){ return alg.elementWiseDivision(alg.onevec(z.size()), alg.subtraction(alg.onevec(z.size()), alg.hadamard_product(z, z))); }
|
||||
return alg.scalarMultiply(0.5, alg.log(alg.elementWiseDivision(alg.addition(alg.onevec(z.size()), z), alg.subtraction(alg.onevec(z.size()), z))));
|
||||
}
|
||||
|
||||
std::vector<std::vector<double>> Activation::artanh(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] = artanh(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] = artanh(z[i]);
|
||||
}
|
||||
return a;
|
||||
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))); }
|
||||
return alg.scalarMultiply(0.5, alg.log(alg.elementWiseDivision(alg.addition(alg.onemat(z.size(), z[0].size()), z), alg.subtraction(alg.onemat(z.size(), z[0].size()), z))));
|
||||
}
|
||||
|
||||
double Activation::arcsch(double z, bool deriv){
|
||||
@ -708,20 +684,9 @@ namespace MLPP{
|
||||
|
||||
std::vector<double> Activation::arcsch(std::vector<double> z, bool deriv){
|
||||
LinAlg alg;
|
||||
if(deriv){
|
||||
std::vector<double> deriv;
|
||||
deriv.resize(z.size());
|
||||
for(int i = 0; i < z.size(); i++){
|
||||
deriv[i] = arcsch(z[i], 1);
|
||||
}
|
||||
return deriv;
|
||||
}
|
||||
std::vector<double> a;
|
||||
a.resize(z.size());
|
||||
for(int i = 0; i < z.size(); i++){
|
||||
a[i] = arcsch(z[i]);
|
||||
}
|
||||
return a;
|
||||
if(deriv){ return alg.elementWiseDivision(alg.full(z.size(), -1), alg.hadamard_product(alg.hadamard_product(z, z), alg.exponentiate(alg.addition(alg.onevec(z.size()), alg.elementWiseDivision(alg.onevec(z.size()), alg.hadamard_product(z, z))), 0.5))); }
|
||||
return alg.log(alg.addition(alg.exponentiate(alg.addition(alg.onevec(z.size()), alg.elementWiseDivision(alg.onevec(z.size()), alg.hadamard_product(z, z))), 0.5), alg.elementWiseDivision(alg.onevec(z.size()), z)));
|
||||
|
||||
}
|
||||
|
||||
std::vector<std::vector<double>> Activation::arcsch(std::vector<std::vector<double>> z, bool deriv){
|
||||
|
Binary file not shown.
18
main.cpp
18
main.cpp
@ -349,17 +349,17 @@ int main() {
|
||||
// alg.printVector(outlierFinder.modelTest(inputSet));
|
||||
|
||||
// // Testing new Functions
|
||||
// double z_s = 4;
|
||||
// std::cout << avn.arcosh(z_s) << std::endl;
|
||||
// std::cout << avn.arcosh(z_s, 1) << std::endl;
|
||||
// double z_s = 0.001;
|
||||
// std::cout << avn.arcsch(z_s) << std::endl;
|
||||
// std::cout << avn.arcsch(z_s, 1) << std::endl;
|
||||
|
||||
// std::vector<double> z_v = {4, 5};
|
||||
// alg.printVector(avn.arcosh(z_v));
|
||||
// alg.printVector(avn.arcosh(z_v, 1));
|
||||
// std::vector<double> z_v = {0.001, 5};
|
||||
// alg.printVector(avn.arcsch(z_v));
|
||||
// alg.printVector(avn.arcsch(z_v, 1));
|
||||
|
||||
// std::vector<std::vector<double>> Z_m = {{4, 5}};
|
||||
// alg.printMatrix(avn.arcosh(Z_m));
|
||||
// alg.printMatrix(avn.arcosh(Z_m, 1));
|
||||
// std::vector<std::vector<double>> Z_m = {{0.001, 5}};
|
||||
// alg.printMatrix(avn.arcsch(Z_m));
|
||||
// alg.printMatrix(avn.arcsch(Z_m, 1));
|
||||
|
||||
// alg.printMatrix(alg.pinverse({{1,2}, {3,4}}));
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user