pytorch量化中torch.quantize_per_tensor()函数参数详解

torch.quantize_per_tensor(input,scale, zero_point, dtype)实现8位量化:

摘要:对该函数各个参数的分析

量化:

计算机运算时,默认32位浮点数,若将32位浮点数,变成8位定点数,会快很多。
目前pytorch中的反向传播不支持量化,所以该量化只用于评估训练好的模型,或者将32位浮点数模型存储为8位定点数模型,读取8位定点数模型后需要转换为32位浮点数才能进行神经网络参数的训练。

量化函数原型:Q = torch.quantize_per_tensor(input,scale = 0.025 , zero_point = 0, dtype = torch.quint8)

**

  1. input为准备量化的32位浮点数,Q为量化后的8位定点数
  2. dtype为量化类型,quint8代表8位无符号数,qint8代表8位带符号数,最高位是符号位
  3. 假设量化为qint8,设量化后的数Q为0001_1101,最高位为0(符号位),所以是正数;后7位转换为10进制是29,所以Q代表的数为 :zero_point + Q * scale = 0 + 29 * 0.025 = 0.725
  4. 所以最终使用print显示Q时,显示的不是0001_1101而是0.725,但它在计算机中存储时,是0001_1101
  5. 使用dequantize()可以解除量化
  6. 量化公式为:量化

**

代码及其运行结果:

在这里插入图片描述

总结:

以zero_point为中心,用8位数Q代表input离中心有多远,scale为距离单位
即input ≈ zero_point + Q * scale.

  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮皮宽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值