Files
NeuralNetworkLib/include/NeuralNetwork/ActivationFunction/Sigmoid.h

40 lines
1.1 KiB
C++

#pragma once
#include <cmath>
#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<Sigmoid> deserialize(const SimpleJSON::Type::Object &obj) {
return std::unique_ptr<Sigmoid>(new Sigmoid(obj["lambda"].as<double>()));
}
protected:
float lambda;
NEURAL_NETWORK_REGISTER_ACTIVATION_FUNCTION(NeuralNetwork::ActivationFunction::Sigmoid, Sigmoid::deserialize)
};
}
}