#pragma once #include namespace NeuralNetwork { namespace ActivationFunction { /** * @author Tomas Cernik (Tom.Cernik@gmail.com) * @brief Abstract class of activation function */ class ActivationFunction { public: virtual ~ActivationFunction() {} /** * @brief Returns derivation of output, it is slower than version with output as it needs to compute output * @param input is input of function */ inline float derivatedOutput(const float &input) { return derivatedOutput(input,operator()(input)); }; /** * @brief Returns derivation of output * @param input is input of function * @param output is output of function * @see derivatedOutput */ virtual float derivatedOutput(const float &input, const float &output) =0; /** * @brief Returns value of output * @param x is input of function */ virtual float operator()(const float &x)=0; /** * @brief Function returns clone of object */ virtual ActivationFunction* clone() const = 0; /** * @brief This is a virtual function for storing Activation function * @returns json describing function */ virtual std::string stringify() const =0; }; } }