Skip to content
Snippets Groups Projects
Neuron.h 3.5 KiB
Newer Older
#ifndef NEURON_H_
#define NEURON_H_

 /**
  * A file containing the mother classe representing neurons
  * in neural networks.
  *
  * @author Martin Beseda
  * @author Martin Mrovec
  * @author Michal Kravčenko
  * @date 2017 - 2018
  */


 /**
  * Abstract class representing a general neuron
  */
class Neuron{

    /**
     * Inner potential of the neuron (input of the activation function)
     */
    double potential = 0.0;

    /**
     * State of the neuron (output of the activation function)
     */
    double state = 0.0;

    /**
     * array of the activation function parameters
     */
    double *activation_function_parameters = nullptr;

    /**
     * Number of parameters of the activation function
     */
    int n_activation_function_parameters = 0;

public:

    /**
     * Destructor of the Neuron object
     * this level deallocates the array 'activation_function_parameters'
     */
    virtual ~Neuron();

    /**
     * Performs the activation function and stores the result into the 'state' property
     */
    virtual void activate( ) = 0;

    /**
     * Adds the input signal value to the current potential
     * @param[in] input_signal Input value
     */
    virtual void adjust_potential(double input_signal);

    /**
     * Getter to the 'potential' property
     * @return Value of the neuron's potential (real number)
     */
    virtual double get_potential();

    /**
     * Setter to the 'potential' property
     * @param[in] value Value of the neuron's potential (real number)
     */
    virtual void set_potential(double value);

    /**
     * Getter to the 'state' property
     * @return Value of the current neuron's state
     */
    virtual double get_state();

    /**
     * Setter to the 'state' component
     * @param[in] value Value of the current neuron's state
     */
    virtual void set_state(double value);

    /**
     * Returns the number of parameters the activation function relies on
     * @return Number of the parameters
     */
    virtual int activation_function_get_n_parameters();

    /**
     * Calculates the partial derivative of the activation function
     * with respect to the parameter and the current potential
     * @param[in] param_idx Index of the parameter to calculate derivative of
     * @return Partial derivative of the activation function according to the
     * 'param_idx'-th parameter
     */
    virtual double activation_function_get_partial_derivative(int param_idx) = 0;

    /**
     * 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_get_derivative( ) = 0;

    /**
     * Adjusts the parameter with index 'param_idx' of the activation function
     * by the value prescribed by 'value'
     * @param[in] param_idx Index of the parameter to be adjusted
     * @param[in] value Value of the adjustment
     */
    virtual void activation_function_adjust_parameter(int param_idx, double value);

    /**
     * Sets the parameter with index 'param_idx' of the activation function
     * to the value prescribed by 'value'
     * @param[in] param_idx
     * @param[in] value
     */
    virtual void activation_function_set_parameter(int param_idx, double value);

    /**
     * Gets the parameter with index 'param_idx' of the activation function
     */
    virtual double activation_function_get_parameter(int param_idx);


}; /* end of Neuron class */


#endif /* NEURON_H_ */