对称量化(1)

步骤解析

数据类型范围:

int8:表示范围为-128到127之间的整数。
uint8:表示范围为0到255之间的整数。

示例浮点数:3.1415926
量化过程
计算线性映射的缩放值 (Scale):
在这里插入图片描述
量化操作:
在这里插入图片描述
在二进制中表示为:01111111
反量化操作:
在这里插入图片描述
Python代码示例

import numpy as np

# 浮点数
float_num = 3.1415926

# int8的最大值
int8_max = 127

# 计算缩放值
scale = float_num / int8_max

# 量化操作
quantized_value = np.round(float_num / scale).astype(np.int8)

# 反量化操作
dequantized_value = quantized_value * scale

print("缩放值 (Scale):", scale)
print("量化值 (Quantized):", quantized_value)
print("反量化值 (Dequantized):", dequantized_value)

示例浮点数组

[−0.75,−0.45,1.75]
量化步骤
1、计算缩放值 (Scale):
在这里插入图片描述
2、量化操作:
在这里插入图片描述
3、裁剪 (Clipping):
将量化值限制在int8范围内:

[−128,127]结果为[−77,−46,127]

4、反量化操作:
在这里插入图片描述
[−77,−46,127] 对应的反量化值为:[−0.754901,−0.450980,1.245098]

遇到的问题
反量化后的值不精确,如 1.245098 与原始 1.75 差异较大。
可能的解决方案:
最大绝对值对称量化:使得正负范围对称。
偏移修正:在量化过程中考虑偏移值。
Python代码示例

import numpy as np

# 浮点数数组
float_array = np.array([-0.75, -0.45, 1.75])

# int8范围
quant_min, quant_max = -128, 127

# 计算缩放值
float_min, float_max = float_array.min(), float_array.max()
scale = (float_max - float_min) / (quant_max - quant_min)

# 量化操作
quantized_values = np.round(float_array / scale).astype(np.int8)

# 裁剪量化值到范围内
clipped_values = np.clip(quantized_values, quant_min, quant_max)

# 反量化操作
dequantized_values = clipped_values * scale

print("缩放值 (Scale):", scale)
print("量化值 (Quantized):", quantized_values)
print("裁剪后的量化值 (Clipped):", clipped_values)
print("反量化值 (Dequantized):", dequantized_values)
  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值