diff --git a/src/Neuron/Neuron.cpp b/src/Neuron/Neuron.cpp index 014d1e993c82277d5d9e144ef5ca633fbeec3022..3f8b77f43c0e09f5b5b222642246e991e003ff61 100644 --- a/src/Neuron/Neuron.cpp +++ b/src/Neuron/Neuron.cpp @@ -8,4 +8,8 @@ namespace lib4neuro { } + double Neuron::get_last_activation_value() { + return this->activation_val; + } + } diff --git a/src/Neuron/Neuron.h b/src/Neuron/Neuron.h index 1fed3ec458cdb5b641da2dd154e9ed156bc0ff3d..88747a63ef073600dae1bce06bf9f34b4f4c0c61 100644 --- a/src/Neuron/Neuron.h +++ b/src/Neuron/Neuron.h @@ -30,6 +30,12 @@ namespace lib4neuro { */ class Neuron { + protected: + /** + * holds the last value of the activation function, used by this->activate + */ + double activation_val; + public: /** @@ -50,6 +56,12 @@ namespace lib4neuro { */ LIB4NEURO_API virtual double activate(double x, double b) = 0; + /** + * returns the last value of the actual activation function output for this neuron + * @return + */ + LIB4NEURO_API virtual double get_last_activation_value( ); + }; /* end of Neuron class */ diff --git a/src/Neuron/NeuronBinary.cpp b/src/Neuron/NeuronBinary.cpp index 2b90fa3a0a285c74ae513c7dab5c54ad5c94b651..9e7bbb80d616a0b56fbfbdecd021e28021ab4b36 100644 --- a/src/Neuron/NeuronBinary.cpp +++ b/src/Neuron/NeuronBinary.cpp @@ -15,10 +15,12 @@ namespace lib4neuro { double NeuronBinary::activate(double x, double b) { if (x >= b) { - return 1.0; + this->activation_val = 1.0; } else { - return 0.0; + this->activation_val = 0.0; } + + return this->activation_val; } } \ No newline at end of file diff --git a/src/Neuron/NeuronConstant.cpp b/src/Neuron/NeuronConstant.cpp index f660e49d68f77074767b097296c7fe1e23c5e1fd..9210b95c62027ce802476a1c1aa258e5f2828d15 100644 --- a/src/Neuron/NeuronConstant.cpp +++ b/src/Neuron/NeuronConstant.cpp @@ -21,7 +21,8 @@ namespace lib4neuro { } double NeuronConstant::activate(double x, double b) { - return this->p; + this->activation_val = this->p; + return this->activation_val; } double NeuronConstant::activation_function_eval_derivative_bias(double x, double b) { diff --git a/src/Neuron/NeuronLinear.cpp b/src/Neuron/NeuronLinear.cpp index b412eef0173f606d62450662c43d696fb4109e36..0cd3aa8d8822d883ac7de8939184a166dc6fc396 100644 --- a/src/Neuron/NeuronLinear.cpp +++ b/src/Neuron/NeuronLinear.cpp @@ -15,7 +15,8 @@ namespace lib4neuro { NeuronLinear::NeuronLinear() {} double NeuronLinear::activate(double x, double b) { - return x + b; + this->activation_val = x + b; + return this->activation_val; } double NeuronLinear::activation_function_eval_derivative_bias(double x, double b) { diff --git a/src/Neuron/NeuronLogistic.cpp b/src/Neuron/NeuronLogistic.cpp index 2b2213209fedb0d1e69d5e97c9f2e0f9154e5f18..dd1469d794c4a4dbba8e3c847bed287a76f42674 100644 --- a/src/Neuron/NeuronLogistic.cpp +++ b/src/Neuron/NeuronLogistic.cpp @@ -23,7 +23,8 @@ namespace lib4neuro { double eb = std::pow(E, b); double denom = (eb + ex); - return (eb * ex * (eb - ex)) / (denom * denom * denom); + this->activation_val = (eb * ex * (eb - ex)) / (denom * denom * denom); + return this->activation_val; } double NeuronLogistic_d2::activation_function_eval_derivative_bias(double x, double b) { @@ -58,7 +59,8 @@ namespace lib4neuro { double d = (eb / ex); double denom = (d + 1); - return d / (denom * denom); + this->activation_val = d / (denom * denom); + return this->activation_val; } double NeuronLogistic_d1::activation_function_eval_derivative_bias(double x, double b) { @@ -91,7 +93,9 @@ namespace lib4neuro { //(1 + e^(-x + b))^(-1) double ex = std::pow(E, b - x); - return 1.0 / (1.0 + ex); + + this->activation_val = 1.0 / (1.0 + ex); + return this->activation_val; } double NeuronLogistic::activation_function_eval_derivative_bias(double x, double b) {