#pragma once #include #include "./ActivationFunction.h" namespace NeuralNetwork { namespace ActivationFunction { /** * @author Tomas Cernik (Tom.Cernik@gmail.com) * @brief Class for computing sigmoid */ class Sigmoid: public ActivationFunction { public: Sigmoid(const float lambdaP = -0.5): lambda(lambdaP) {} inline virtual float derivatedOutput(const float &, const float &output) const override { return -lambda*output*(1.0f-output); } inline virtual float operator()(const float &x) const override { return 1.0f / (1.0f +exp(lambda*x) ); }; virtual ActivationFunction* clone() const override { return new Sigmoid(lambda); } virtual SimpleJSON::Type::Object serialize() const override { return {{"class", "NeuralNetwork::ActivationFunction::Sigmoid"}, {"lambda", lambda}}; } static std::unique_ptr deserialize(const SimpleJSON::Type::Object &obj) { return std::unique_ptr(new Sigmoid(obj["lambda"].as())); } protected: float lambda; NEURAL_NETWORK_REGISTER_ACTIVATION_FUNCTION(NeuralNetwork::ActivationFunction::Sigmoid, Sigmoid::deserialize) }; } }