From 310c4c918e4045614b8d22dce7d0f5e7d344ed2d Mon Sep 17 00:00:00 2001 From: Michal Kravcenko <michal.kravcenko@vsb.cz> Date: Wed, 20 Feb 2019 14:03:25 +0100 Subject: [PATCH] ADD: added a new function to retrieve the last calculated activation value of the neuron --- src/Neuron/Neuron.cpp | 4 ++++ src/Neuron/Neuron.h | 12 ++++++++++++ src/Neuron/NeuronBinary.cpp | 6 ++++-- src/Neuron/NeuronConstant.cpp | 3 ++- src/Neuron/NeuronLinear.cpp | 3 ++- src/Neuron/NeuronLogistic.cpp | 10 +++++++--- 6 files changed, 31 insertions(+), 7 deletions(-) diff --git a/src/Neuron/Neuron.cpp b/src/Neuron/Neuron.cpp index 014d1e99..3f8b77f4 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 1fed3ec4..88747a63 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 2b90fa3a..9e7bbb80 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 f660e49d..9210b95c 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 b412eef0..0cd3aa8d 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 2b221320..dd1469d7 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) { -- GitLab