神经网络量化----为了部署而特别设计

引言:一般神经网络量化有两个目的:

  1. 为了加速,在某些平台上浮点数计算比较耗费时间,替换为整形可以加快运算
  2. 为了部署,某些平台上只支持整形运算,比如在芯片中

如果是第1个目的,则使用常规的量化手段就可以满足,将浮点数运算变成整形运算+较少的浮点运算

但是如果是第2个目的,那就需要对量化手段做一下改变。

如果是初学者,大家可以先看我的另一篇博客,这里有详细介绍【精选】神经网络量化----吐血总结-CSDN博客量化技术是连接学院派和工程派之间的桥梁,效果再好的网络速度不快,那么也不会在工业上普及,因此量化技术还是很有发展潜力的。_神经网络量化https://blog.csdn.net/weixin_41910772/article/details/109637956

目录

 1. 关于量化,我们需要了解哪些可以人为设计

1.1 缩放因子

1.2 权重初始化

1.3 损失

1.4 标签的变换

1.5 s设置后的收敛问题


 

 

 1. 关于量化,我们需要了解哪些可以人为设计

1.1 缩放因子

        以对称量化举例,输入、权重、输出可以表示为

                        x=x_{q}/s_{1}w=w_{q}/s_{2}y=y_{q}/s_{3}

        在训练时设置约束,可以将他们的关系表示为

        ​​​​​​​        ​​​​​​​        y_{q}/s_{3}=f(w_{q}*x_{q}/s_{1}/s_{2})

        其中的f可以为四舍五入、向下取整或者向上取整,变换一下或许更加清晰:

                        y_{q}=f(w_{q}*x_{q}*\frac{s_{3}}{s_{1}*s_{2}})

        那么如果你的平台只支持整形的四则运算以及移位操作,而{s_{3}}/({s_{1}*s_{2}})是个浮点数,那么就需要对{s_{3}}/({s_{1}*s_{2}})做一个巧妙的设计,比如在训练时直接将这个比值表示为a*2^b,这样就将与浮点数的运算表示为与整形的乘法和移位操作了,又或者将s都限制为2^m,这样就将与浮点数的运算表示为移位操作了。

1.2 权重初始化

        为了配合1.1中的对s做限制,初始化是个关键的步骤,好的初始化可以快速收敛,我个人比较喜欢torch.nn.init.xavier_normal_,这个初始化会根据扇入扇出来使得输入输出的方差保持一致,这样s1,s3不会有太大的变动。

1.3 损失

        例如,在二分类中,通过的做法是最后一层使用sigmoid+BCE损失,由于sigmoid的存在会导致输入的分布过于分散,所以可以将sigmoid+BCE替换为MSE。

1.4 标签的变换

        为了配合s的设置,还需要将标签变换一下,使得输出分布尽量沿原点对称且集中,比如二分类中,标签为0、1,那么可以修改为-0.5,+0.5.

1.5 s设置后的收敛问题

        可以将溢出的数据的梯度设置为0。

2. 举例说明

接下来我会找一个典型的芯片部署的问题来进行说明,,,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/140382.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小程序canvas层级过高真机遮挡组件的解决办法

文章目录 问题发现真机调试问题分析问题解决改造代码效果展示 问题发现 在小程序开发中需要上传图片进行裁剪&#xff0c;在实际真机调试中发现canvas层遮挡住了生成图片的按钮。 问题代码 <import src"../we-cropper/we-cropper.wxml"></import> <…

小程序-uni-app:将页面(html+css)生成图片/海报/名片,进行下载 保存到手机

一、需要描述 本文实现&#xff0c;uniapp微信小程序&#xff0c;把页面内容保存为图片&#xff0c;并且下载到手机上。 说实话网上找了很多资料&#xff0c;但是效果不理想&#xff0c;直到看了一个开源项目&#xff0c;我知道可以实现了。 本文以开源项目uniapp-wxml-to-can…

mybatis一级缓存和二级缓存

计算机有两大基本的功能&#xff1a;计算和存储 存储方面&#xff0c;缓存的设计和实现也是一门学问。这门学问里面包含什么门道呢&#xff1f;不妨研究一下MyBatis缓存类PerpetualCache&#xff0c;一定会大有收获的。在MyBatis里面&#xff0c;存在一个PerpetualCache&#x…

关闭mysql,关闭redis服务

1. 关闭redis服务&#xff1a; 查询redis安装目录&#xff1a; whereis redis which redis find / -name redis 关闭redis服务&#xff1a; redis-cli -h 127.0.0.1 -p 6379 auth 输入密码 shutdown 关闭redis服务 2. 关闭mysql服务&#xff1a; 查询mysql安装目录&…

python中不可变类型和可变类型

不可变类型&#xff1a;修改之后内存存储地址不会发生改变 可变类型&#xff1a;修改之后内存存储地址发生改变 set

防火墙管理工具增强网络防火墙防御

防火墙在网络安全中起着至关重要的作用。现代企业具有多个防火墙&#xff0c;如&#xff1a;电路级防火墙、应用级防火墙和高级下一代防火墙&#xff08;NGFW&#xff09;的复杂网络架构需要自动化防火墙管理和集中式防火墙监控工具来确保边界级别的安全。 网络防火墙安全和日…

中文编程开发语言工具开发的实际软件案例:称重管理系统软件

中文编程开发语言工具开发的实际软件案例&#xff1a;称重管理系统软件 中文编程开发语言工具开发的实际软件案例&#xff1a;称重管理系统软件&#xff0c;软件可以安装在电脑上&#xff0c;也可以安装在收银机上&#xff0c;支持触摸和鼠标点&#xff0c;想学编程可以关注系统…

如何降低海康、大华等网络摄像头调用的高延迟问题(一):海康威视网络摄像头的python sdk使用(opencv读取sdk流)

目录 1.python sdk使用 1.海康SDK下载 2.opencv读取sdk流 先说效果&#xff0c;我是用的AI推理的实时流&#xff0c;延迟从高达7秒降到小于1秒 如果觉得这个延迟还不能接受&#xff0c;下一章&#xff0c;给大家介绍点上不得台面的小方法 SDK&#xff08;Software Developme…

React组件渲染和更新的过程

一、回顾Vue组件渲染和更新的过程 二、回顾JSX本质和vdom 三、组件渲染和更新 1、组件渲染过程 props state (组件有了props state)render()生成vnodepatch(elem, vnode) 2、组件更新过程 setState(newState) --> dirtyComponents (可能有子组件)render()生成newVnodepa…

温湿度监测技术又进化了,这个操作太牛了!

无论是在家庭、医疗、农业、制造业&#xff0c;还是在物流和食品行业&#xff0c;精确的温湿度监控对于确保安全、质量和效率都至关重要。 客户案例 医疗行业 在医疗行业&#xff0c;温湿度监控对于存储药品、生物样本和医疗设备至关重要。山东某医院引入了泛地缘科技推出的温湿…

LeetCode【17】电话号码的字母组合

题目&#xff1a; 思路&#xff1a; 参考&#xff1a;https://blog.csdn.net/weixin_46429290/article/details/121888154 和上一个题《子集》的思路一样&#xff0c;先画出树结构&#xff0c;看树的深度&#xff08;遍历层级&#xff09;&#xff0c;树的宽度&#xff08;横向…

智慧门牌管理系统:省市区县区划数据与国家级开发区共融

文章目录 前言一、行政区划数据的重要性二、支持国家级开发区的发展三、数据基础的重要性 前言 随着科技的飞速发展&#xff0c;我们的生活正在发生日新月异的变化。其中&#xff0c;智慧城市的概念正逐渐成为我们生活中的一部分。智慧城市&#xff0c;顾名思义&#xff0c;运…