北京招聘网站排行,如何做学校的网站,夜夜做新郎网站在线视频,做网站设计累吗量化反量化
量化操作可以将浮点数转换为低比特位数据表示,比如int8和 uint8.
Q(x_fp32, scale, zero_point) round(x_fp32/scale) zero_point,量化后的数据可以经过反量化操作来获取浮点数
x_fp32 (Q - zero_point)* scale pytorch中 quantize_per_tensor的解释
py…量化反量化
量化操作可以将浮点数转换为低比特位数据表示,比如int8和 uint8.
Q(x_fp32, scale, zero_point) round(x_fp32/scale) zero_point,量化后的数据可以经过反量化操作来获取浮点数
x_fp32 (Q - zero_point)* scale pytorch中 quantize_per_tensor的解释
pytorch可以使用quantize_per_tensor函数来对一个浮点tensor做8bit量化. ts_quant torch.quantize_per_tensor(ts, scale 0.1, zero_point 10, dtype torch.quint8)print(ffp32 ts:{ts}, quant ts:{ts_quant}, int_repr:{ts_quant.int_repr()})# 截断后的浮点数.naive_quant np.array([24.5, 1.0, 2.0]) / 0.1 10print(fnaive_quant:{naive_quant})打印结果:
fp32 ts:tensor([100., 1., 2.]), quant ts:tensor([24.5000, 1.0000, 2.0000], size(3,), dtypetorch.quint8,quantization_schemetorch.per_tensor_affine, scale0.1, zero_point10), int_repr:tensor([255, 20, 30], dtypetorch.uint8)
naive_quant:[255. 20. 30.]有几点值得说明
ts_quant直接打印出来的值并不是quint8数据,依然是个浮点,它表示的是映射到8bit后被截断剩下有效的浮点范围. scale0.1的前提下,uint8只能表示出[0, 25.5]范围的浮点数,加上zero_point10, 那么输入的浮点必须要在[0, 24.5]范围内才能被表示,超出部分会被截断,所以打印出来的是24.5, 1, 2.浮点表示的[24.5, 1.0, 2.0]可以通过int_repr方法打印出定点表示.int_repr等效与naive_quant的实现