当前位置: 首页 > news >正文

神经网络模型量化代码解析

PTQ Post Training Quantization 是训练后量化,也叫做离线量化,根据量化零点 是否为 0,训练后量化分为对称量化和非对称量化;根据数据通道顺序 NHWC(TensorFlow) 这一维度区分,训练后量化又分为逐层量化和逐通道量化。目前 nvidia 的 TensorRT 框架中使用了逐层量化的方法,每一层采用同一个阈值来进行量化。逐通道量化就是对每一层每个通道都有各自的阈值,对精度可以有一个很好的提升。
量化的本质就是映射,神经网络权值一般在[-1,1],量化后 映射到 int8 也就是 [0,255]
可以看出 映射的本质也是函数,而且也就是 直线函数
import os
os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE"import torch
import torchvision
import matplotlib.pyplot as plt# 加载预训练的模型
model = torchvision.models.resnet18(pretrained=True)# 获取卷积层的权值,量化前的权重
conv1_weights = model.conv1.weight.data# 可视化权值q_after=[]plt.axis('off')
for i in range(64):c=conv1_weights[i].numpy().flatten()scale=255/(c.max()-c.min())zero=255-c.max()*scaleqc=scale*c+zeroq_after.append(qc)print(qc.round())print(c.max(),c.min())x = list(range(len(c)))plt.plot(x,c)#设置说明框legend = plt.legend(loc='best', shadow=True)frame = legend.get_frame()frame.set_facecolor('0.90') #frame的颜色
plt.show()print('量化后的权重')
print(np.array(q_after).reshape([64,3,7,7]))

http://www.mrgr.cn/news/51421.html

相关文章:

  • Docker常用命令分享二
  • DC系列靶机-DC5
  • Unity3D 游戏性能优化全流程建设详解
  • 基于Arduino做的“鱿鱼游戏”BOSS面具,支持动作检测
  • 对接优惠折扣影票接口有什么好处?
  • 一款极高性价比的高性能CMOS低压差线性稳压器——ADM7172深度解析与应用简介
  • [vue2] 由mapbox2升级为mapbox3遇到的矢量底图样式丢失问题解决办法
  • linux下编译鸿蒙版boost库
  • PG 17 增量备份功能介绍
  • 手把手教你玩转Midjourney,保姆级教程公开
  • Mac中使用brew安装指定版本软件包
  • [哈工大]战德臣 数据库系统 第3讲 关系模型之基本概念
  • torch运行异常·找不到指定的模块|fbgemm.dll
  • 百年德企科世达颠覆传统报销,依托分贝通实现差旅支出降本百万
  • VMware-Converter-Agent.exe 安装失败
  • 快快网络DDoS安全防护系统抵御了创纪录的 2.35 Tbps DDoS 攻击
  • 深入理解Qt中的QTableView、Model与Delegate机制
  • jvm虚拟机调优实战
  • 715: 字典序问题
  • EasyOCR——超强超便捷的OCR开源算法介绍与文本检测模型CRAFT微调方法