1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
#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
|