- activation op
if self.method_.lower() == 'sigmoid':
if self.is_signed: # special process for wavenet
o_scale = 127.0
sigRange = o_scale / input_scale
xs = np.linspace(-sigRange, sigRange, 2 **quantize_param['precision_bits'])
self.lut_[self.qprec] = np.clip(np.round(
o_scale * self.sigmoid_(xs)).astype(np.int32), -128, 127).astype(np.int8)
total_scale, zp = np.array([o_scale]), np.array([0])
else:
o_scale = float(2 ** self.qbits)
xs = np.linspace(precision_q_min / input_scale, precision_q_max / input_scale,
2**quantize_param['precision_bits'])
self.lut_[self.qprec] = np.clip(np.round(o_scale * self.sigmoid_(xs)),
0, o_scale).astype(np.uint8)
total_scale, zp = np.array([o_scale]), np.array([0])
self.out_scale = total_scale
- out_scale/ input_scale用在LUT里作为激活函数的range?
- total_scale=out_scale
- do_scale, do_shift = cal_doScale_doShift(total_scale)
do_shift = np.floor((np.log(total_scale) / np.log(0.5))).astype(np.int8)
do_scale = np.clip(np.round(total_scale / 0.5 ** do_shift * default_factor), 0, clip_max).astype(npdtype)