#pragma once #include "./ActivationFunction.h" #include namespace NeuralNetwork { namespace ActivationFunction { class HyperbolicTangent: public ActivationFunction { public: HyperbolicTangent(const float& lam=1):lambda(lam) {} inline virtual float derivatedOutput(const float &,const float &output) const override { return lambda*(1-output*output); } inline virtual float operator()(const float &x) const override { return tanh(lambda*x); } ; virtual ActivationFunction* clone() const override { return new HyperbolicTangent(lambda); } virtual SimpleJSON::Type::Object serialize() const override { return {{"class", "NeuralNetwork::ActivationFunction::HyperbolicTangent"}, {"lambda", lambda}}; } static std::unique_ptr deserialize(const SimpleJSON::Type::Object &obj) { return std::unique_ptr(new HyperbolicTangent(obj["lambda"].as())); } protected: float lambda; NEURAL_NETWORK_REGISTER_ACTIVATION_FUNCTION(NeuralNetwork::ActivationFunction::HyperbolicTangent, HyperbolicTangent::deserialize) }; } }