mirror of
https://github.com/Relintai/MLPP.git
synced 2025-04-23 21:23:22 +02:00
"Vectorized" arcsch for matricies
This commit is contained in:
parent
a84e38fc59
commit
d76a8787f1
@ -686,25 +686,12 @@ namespace MLPP{
|
|||||||
LinAlg alg;
|
LinAlg alg;
|
||||||
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))); }
|
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)));
|
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){
|
std::vector<std::vector<double>> Activation::arcsch(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(alg.hadamard_product(z, z), alg.exponentiate(alg.addition(alg.onemat(z.size(), z[0].size()), alg.elementWiseDivision(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.exponentiate(alg.addition(alg.onemat(z.size(), z[0].size()), alg.elementWiseDivision(alg.onemat(z.size(), z[0].size()), alg.hadamard_product(z, z))), 0.5), alg.elementWiseDivision(alg.onemat(z.size(), z[0].size()), z)));
|
||||||
deriv.resize(z.size());
|
|
||||||
for(int i = 0; i < z.size(); i++){
|
|
||||||
deriv[i] = arcsch(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] = arcsch(z[i]);
|
|
||||||
}
|
|
||||||
return a;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user