/** * DESCRIPTION OF THE CLASS * * @author Martin Beseda * @author Martin Mrovec * @author Michal KravĨenko * @date 2017 - 2018 */ //TODO correct docs in this and all child classes #ifndef NEURON_H_ #define NEURON_H_ #include "../settings.h" #include <vector> namespace lib4neuro { /** * */ enum NEURON_TYPE { BINARY, CONSTANT, LINEAR, LOGISTIC }; /** * Abstract class representing a general neuron */ class Neuron { protected: /** * holds the last value of the activation function, used by this->activate */ double activation_val; public: /** * Struct used to access private properties from * the serialization function */ struct access; /** * Destructor of the Neuron object * this level deallocates the array 'activation_function_parameters' * also deallocates the OUTGOING connections */ LIB4NEURO_API virtual ~Neuron(); /** * Performs the activation function and returns the result */ 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 */ /** * Class serving as an interface providing 'activation_function_eval_partial_derivative', * 'activation_function_eval_derivative', 'get_partial_derivative' and * 'get_derivative' methods. */ class NeuronDifferentiable : public Neuron { public: /** * Struct used to access private properties from * the serialization function */ struct access; /** * Calculates the derivative with respect to the argument, ie the 'potential' * @return f'(x), where 'f(x)' is the activation function and 'x' = 'potential' */ virtual double activation_function_eval_derivative(double x, double b) = 0; /** * Calculates the derivative with respect to the bias * @return d/db f'(x), where 'f(x)' is the activation function, 'x' is the 'potential' * and 'b' is the bias */ virtual double activation_function_eval_derivative_bias(double x, double b) = 0; /** * Returns a Neuron pointer object with activation function being the partial derivative of * the activation function of this Neuron object with respect to the argument, i.e. 'potential' * @return */ virtual Neuron *get_derivative() = 0; }; } #endif /* NEURON_H_ */