| #pragma once | |
| #include "caffe2/quantization/server/tanh.h" | |
| namespace dnnlowp { | |
| /** | |
| * sigmoid(x) = (tanh(x/2) + 1)/2 | |
| * Quantized sigmoid is computed as tanh under the hood, we just use different | |
| * input/output quantization parameters. | |
| */ | |
| template <typename T> | |
| class Sigmoid { | |
| public: | |
| Sigmoid(double max_abs_err_ = Tanh<T>::DEFAULT_MAX_ABS_ERR); | |
| T Compute(T x) const; | |
| TensorQuantizationParams GetInputQuantizationParams() const { | |
| return in_qparams_; | |
| } | |
| TensorQuantizationParams GetOutputQuantizationParams() const { | |
| return out_qparams_; | |
| } | |
| private: | |
| const int num_in_bits_ = Tanh<T>::DEFAULT_NUM_IN_BITS; | |
| const int num_out_bits_ = Tanh<T>::DEFAULT_NUM_OUT_BITS; | |
| Tanh<T> tanh_; | |
| TensorQuantizationParams in_qparams_, out_qparams_; | |
| }; // class Sigmoid | |
| } // namespace dnnlowp |