qnq不是量子化

qnq的Python项目详细描述


QNQ—QNQ不量子化

版本0.1.8 2020.10.10

说明

该工具包是Techart算法团队用来量化他们定制的神经网络的预训练模型。 工具箱现在是测试版,你可以通过电子邮件(dongzhiwei2021@outlook.com)与我联系,以添加操作和修复错误。在

如何安装

pip install qnq

如何量化

您可以访问https://git.zwdong.com/zhiwei.dong/qnq_tutorial以获取有关QNQ的更多示例。在

  1. 准备好你的模型。在

    1. 检查模型是否包含非类运算符,例如火炬.马特姆. 在
    2. 如果True,请将from qnq.operators.torchfunc_ops import *添加到代码中。在
    3. 然后使用class replace non-class运算符,您可以引用fellow#! add by dongz
    classBasicBlock(nn.Module):expansion=1def__init__(self,inplanes,planes,stride=1,downsample=None):super(BasicBlock,self).__init__()self.conv1=conv3x3(inplanes,planes,stride)self.bn1=nn.BatchNorm2d(planes)self.relu1=nn.ReLU(inplace=True)self.relu2=nn.ReLU(inplace=True)self.conv2=conv3x3(planes,planes)self.bn2=nn.BatchNorm2d(planes)self.downsample=downsampleself.stride=stride#! add by dongzself.torch_add=TorchAdd()defforward(self,x):identity=xout=self.conv1(x)out=self.bn1(out)out=self.relu1(out)out=self.conv2(out)out=self.bn2(out)ifself.downsampleisnotNone:identity=self.downsample(x)#! add by dongzout=self.torch_add(out,identity)# out += identityout=self.relu2(out)returnout
  2. 准备好装载机。在

    1. 你应该先用一个
    2. 你应该选择至少1k的数据来校准你的量化模型。在
  3. 准备预先训练的检查点。在

    1. 训练模型并使用torch.save()保存检查点。在
    2. 使用checkpoints = torch.load(checkpoints_path)model.load_state_dict(checkpoints)加载检查点。在
  4. 量化

    1. 添加from qnq import quantize
    2. 呼叫quantize(model, bit_width, data_loader, path)。在

如何量化评价

  1. quantize()将为模型启用“eval模式”,这将自动量化激活,并且权重现在已经是固定点。在
  2. 只需调用您的原始版本eval()

如何调试

  1. 呼叫quantize(model, bit_width, data_loader, path, is_debug=True)。在
  2. 调试模式将绘制每个层的统计信息。在

转换为ONNX模型

支持的运算符

  • 卷积层
    • 转换
    • 转换
  • 汇集层
    • 平均池
    • 自适应AVGPool
  • 激活
    • Relu、Relu6
    • PRelu、LeakyRelu
  • 标准化层
    • 批量定额
    • 层状结构
  • 线性层
    • 线性
  • 视觉层
    • 上采样
  • 火炬功能
    • 加法、减号、DotMul、MatMul、Div、Exp
    • 罪恶,罪恶
    • SoftMax,乙状结肠
    • TorchTemplate,torchtummy

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在验证检查中改进构建器模式?   java如何定义一个依赖项来获取快照?   java Javafx webview在运行时不显示dashplotly应用程序   java Android kotlin单元测试用例。。?   java Android:SurfaceView,为什么要使用不同的线程   Android/Java“org.apache.http.ProtocolException”,http头应答有问题   反射如何确定类成员是否是静态的以及Java中的字段   java设置EditText以接受双值的问题   类加载器如何使用类加载器将jar从我的网站加载到java应用程序的脚本中   java GWT HTMLTable colaspan功能   java无法删除/重命名文件   java Navigableset vs Navigablemap   php中java加密方法的转换   java为什么加载我的共享对象文件会在Netbeans 8.2中出现“未满足链接”错误?   java JAXRS CXF异常包装   java程序在If语句之后执行Else语句   java将对象转换为JAXBElement<Object>