pytorch动态量化函数torch.quantization.quantize_dynamic详解

pytorch 提供torch.quantization.quantize_dynamic函数,对模型中的某些层进行量化


1.初始化一个RNN模型,里面包含了LSTM层和全连接层,使用torch.quantization.quantize_dynamic对模型进行量化。

import torch.quantization

quantized_model = torch.quantization.quantize_dynamic(
    rnn, {nn.Linear}, dtype=torch.qint8                     #rnn为模型的名字,我们只量化线性层
)
print(quantized_model)

如果想量化线性层和LSTM层,将{nn.Linear}改为{nn.Linear,nn.LSTM}即可
dtype=torch.qint8 表示量化为有符号8位数,也可以选择无符号8位数quint8

2.检查量化后各层参数

在这里插入图片描述
以上是全连接层的参数,如图所示,全连接层的参数被量化为qint8(有符号8位数),zero_point和scale是pytorch量化时自己默认的量化参数,这两个参数的意思可以参考这篇博客torch.quantize_per_tensor()函数参数详解
在这里插入图片描述
如图,LSTM层未量化,所以LSTM层的参数是32位浮点数

3.什么是动态量化

torch.quantize_per_tensor()函数的scale和zero_point需要自己设定。
所谓动态是指这个函数torch.quantization.quantize_dynamic能自动选择最合适的scale和zero_point。
这两个参数的意思可以参考这篇博客torch.quantize_per_tensor()函数参数详解

4.量化后的训练和验证

量化后的模型,只能用于推理验证,不能训练!!!
执行梯度迭代操作时会报错。。。

5.总结

目前只想到了渐进量化的方式去减小量化误差。。。。。。。。。

等我想到更好的,可训练的量化方法再更新。。。。。。。。

  • 8
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 20
    评论
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

皮皮宽

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

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

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

打赏作者

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

抵扣说明:

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

余额充值