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

神经网络量化3-全连接层实现量化

本节,我们模拟下全连接层实现量化,原理上为了方便计算,全连接矩阵采用动态量化的方法,而输入由于不断在变化,我们采用静态量化的方法,直接给出代码:

import torch
import numpy as np
import math
#静态量化
def fix_quantize_tensor(array, highB, lowB, num_bits=8):rangeB = highB - lowBshiftDist = -(highB + lowB) / 2qmax = 2.**num_bits - 1.zero_point = shiftDist / rangeB * qmax;qmaxp = 2.**(num_bits - 1) - 1.qminp = -2.**(num_bits - 1)zero_point = math.floor(zero_point)scale = rangeB / qmaxq_x = array/scale + zero_pointq_x = q_x.round().int()q_x[q_x > qmaxp] = qmaxpq_x[q_x < qminp] = qminpreturn q_x, zero_point, scale
#动态量化
def quantize_tensor(array, num_bits=8):highB = array.max()lowB = array.min()rangeB = highB - lowBshiftDist = -(highB + lowB) / 2qmax = 2.**num_bits - 1.zero_point = shiftDist / rangeB * qmax;qmaxp = 2.**(num_bits - 1) - 1.qminp = -2.**(num_bits - 1)zero_point = zero_point.floor().int()scale = rangeB / qmaxq_x = array/scale + zero_pointq_x = q_x.round().int()q_x[q_x > qmaxp] = qmaxpq_x[q_x < qminp] = qminpreturn q_x, zero_point, scale
#输入信号    
x1 = torch.randn(1, 10, dtype=torch.float32) * 0.1
#权重矩阵
W = torch.randn(10, 10, dtype=torch.float32) * 0.1
#偏置
mbias = torch.randn(1, 10, dtype=torch.float32) * 0.1print('************quantize value**************')
q2, z2, s2 = quantize_tensor(W)m_range = 0.5
print(x1)
#静态量化输入信号,且输入信号量化范围对称
q1, z1, s1 = fix_quantize_tensor(x1, m_range, -m_range)
print(q1, z1, s1)print(mbias)
#偏置的量化和输入信号要一致,这样可以减少运算复杂度
qb, zb, sb = fix_quantize_tensor(mbias, m_range, -m_range)
print(qb, zb, sb)print('************quantize matrix multiply*************')
########### s1(q1-z1)q2+qb #############
#通过*2^16+移位的方式来实现浮点乘运算
M0 = int(s2 * (2**16))
qresult = (torch.matmul(q1 - z1, q2) * M0) >> 16
qresult = qresult.round().int() + qb
print(qresult)
print('************quant result***********************')
print(qresult * s1)
print('************real result*************************')
print(torch.matmul(x1, W) + mbias)

结果:

************quantize value**************
tensor([[ 0.1819,  0.0145, -0.2078, -0.0485, -0.0212, -0.0677, -0.0572,  0.0349,0.1925, -0.0266]])
tensor([[ 46,   4, -53, -12,  -5, -17, -15,   9,  49,  -7]], dtype=torch.int32) 0 0.00392156862745098
tensor([[ 0.0032,  0.0095, -0.1825, -0.1033, -0.0582, -0.1757, -0.0893,  0.0119,0.0336, -0.0487]])
tensor([[  1,   2, -47, -26, -15, -45, -23,   3,   9, -12]], dtype=torch.int32) 0 0.00392156862745098
************quantize matrix multiply*************
tensor([[ -1,  -1, -44, -38, -15, -53, -31,   9,   4, -15]], dtype=torch.int32)
************quant result***********************
tensor([[-0.0039, -0.0039, -0.1725, -0.1490, -0.0588, -0.2078, -0.1216,  0.0353,0.0157, -0.0588]])
************real result*************************
tensor([[-0.0041, -0.0049, -0.1688, -0.1506, -0.0592, -0.2056, -0.1213,  0.0356,0.0133, -0.0617]])

注意结果是随机的,需要注意,我们对于输入信号和偏置的量化采用的是相同的量化参数,且zero_point为0,这是常用的一种方法,可以简化操作流程,得到的结果就是按照这个量化参数量化的结果(s1和z1),对于神经网络下一级可以继续按照这样的量化信号继续下一级运算,

相关文章:

神经网络量化3-全连接层实现量化

本节&#xff0c;我们模拟下全连接层实现量化&#xff0c;原理上为了方便计算&#xff0c;全连接矩阵采用动态量化的方法&#xff0c;而输入由于不断在变化&#xff0c;我们采用静态量化的方法&#xff0c;直接给出代码&#xff1a; import torch import numpy as np import m…...

【从零开始学习计算机科学】软件测试(九)Web系统测试 与 数据库测试

【从零开始学习计算机科学】软件测试(九)Web系统测试 与 数据库测试 Web系统测试Web系统基本组成Web系统的服务器端应用特点Web系统测试的分类Web应用系统测试的实施功能测试链接测试表单测试性能测试连接速度测试负载测试压力测试可用性测试导航测试图形测试内容测试表格测试…...

G-Star 校园开发者计划·黑科大|开源第一课之 Git 入门

万事开源先修 Git。Git 是当下主流的分布式版本控制工具&#xff0c;在软件开发、文档管理等方面用处极大。它能自动记录文件改动&#xff0c;简化合并流程&#xff0c;还特别适合多人协作开发。学会 Git&#xff0c;就相当于掌握了一把通往开源世界的钥匙&#xff0c;以后参与…...

笔记:代码随想录算法训练营day58:101.孤岛的总面积、102.沉没孤岛、103.水流问题、104.建造最大岛屿

学习资料&#xff1a;代码随想录 文中含大模型生成内容 101. 孤岛的总面积 卡码网&#xff1a;101. 孤岛的总面积 所以找周边都是水的陆地的方法就是找边缘的陆地然后删除它连同它的连通的陆地 深搜 #include <iostream> #include <vector> using namespac…...

5.0 VisionPro调用USB相机的方法与步骤说明(一)

本文介绍如何在C#中调用visionPro以处理USB相机采集到的图片。示例如下: 主要思路如下: 1. 使用AForge来打开以及采集usb相机照片。 usb相机处于一直运行状态。每隔100ms采集一次照片。且触发一次事件。 public void Start() { this.videoSourcePlayer.Stop(); …...

微信小程序计算属性与监听器:miniprogram-computed

小程序框架没有提供计算属性相关的 api &#xff0c;但是官方为开发者提供了拓展工具库 miniprogram-computed。 该工具库提供了两个功能&#xff1a; 计算属性 computed监听器 watch 一、安装 miniprogram-computed 在项目的根目录下&#xff0c;使用如下命令&#xff0c;…...

强大的AI网站推荐(第二集)—— V0.dev

网站&#xff1a;V0.dev 号称&#xff1a;前端开发神器&#xff0c;专为开发人员和设计师设计&#xff0c;能够使用 AI 生成 React 代码 博主评价&#xff1a;生成的UI效果太强大了&#xff0c;适合需要快速创建UI原型的设计师和开发者 推荐指数&#xff1a;&#x1f31f;&…...

整理和总结微信小程序的高频知识点

前言 近期萌生了一些想法&#xff0c;感觉可以做一个小程序作为产出。 但小程序做得比较少&#xff0c;因此边做边复习。整理和总结了一些高频知识点和大家一起分享。 一、模板和组件 1.1模板&#xff08;Template&#xff09; 优势 简单灵活&#xff1a;模板定义和使用都较…...

vue中js简单创建一个事件中心/中间件/eventBus

vue中js简单创建一个事件中心/中间件/eventBus 目录结构如下&#xff1a; eventBus.js class eventBus {constructor() {this.events {};}// 监听事件on(event, callback) {if (!this.events[event]) {this.events[event] [];}this.events[event].push(callback);}// 发射…...

01. Linux嵌入式系统学习笔记(一)

一. linux基础操作指令 1. 新建文件和目录 (1) 新建文件 touch 命令&#xff1a;用于创建空文件。 touch filename.txt 如果文件已存在&#xff0c;touch 会更新文件的访问时间和修改时间。 (2) 新建目录 mkdir 命令&#xff1a;用于创建目录。 mkdir directoryname 使…...

【从零开始学习计算机科学】软件测试(十)嵌入式系统测试、游戏开发与测试过程、移动应用软件测试 与 云应用软件测试

【从零开始学习计算机科学】软件测试(十)嵌入式系统测试、游戏开发与测试过程、移动应用软件测试 与 云应用软件测试 嵌入式系统测试测试策略及测试流程嵌入式软件测试问题及测试方法嵌入式软件的测试流程游戏开发与测试过程游戏开发与通用软件的开发过程区别游戏测试主要内容…...

# [RPA] 使用八爪鱼进行高效网页数据采集

在许多行业中&#xff0c;数据是核心资产。然而&#xff0c;虽然许多网站的文本内容可以免费访问&#xff0c;但手动一条一条采集&#xff0c;不仅耗时耗力&#xff0c;还容易出错。这种情况下&#xff0c;使用自动化工具来提高采集效率就显得尤为重要。本文将介绍 八爪鱼 这一…...

K8S学习之基础三十七:prometheus监控node资源

Prometheus v2.2.1 ​ 编写yaml文件&#xff0c;包含创建ns、configmap、deployment、service # 创建monitoring空间 vi prometheus-ns.yaml apiVersion: v1 kind: Namespace metadata:name: monitor-sa# 创建SA并绑定权限 kubectl create serviceaccount monitor -n monito…...

#mapreduce打包#maven:could not resolve dependencies for project

打包报错&#xff1a; #报错信息&#xff1a; [ERROR] Failed to execute goal on project mapreduce_teacher1: Could not resolve dependencies for project org.example:mapreduce_teacher1:jar:1.0-SNAPSHOT: Failed to collect dependencies at org.apache.hive:hive-exe…...

QT软件匠心开发,塑造卓越设计服务

在当今这个数字化飞速发展的时代&#xff0c;软件已经成为我们生活中不可或缺的一部分。而QT&#xff0c;作为一款跨平台的C图形用户界面应用程序开发框架&#xff0c;凭借其强大的功能和灵活性&#xff0c;在众多软件开发工具中脱颖而出。我们深知&#xff0c;在软件开发领域&…...

田间机器人幼苗视觉检测与护苗施肥装置研究(大纲)

田间机器人幼苗视觉检测与护苗施肥装置研究 基于多光谱视觉与精准施肥的农业机器人系统设计 第一章 绪论 1.1 研究背景与意义 农业智能化需求&#xff1a; 传统幼苗检测依赖人工&#xff0c;效率低且易遗漏弱苗/病苗施肥不精准导致资源浪费和环境污染 技术挑战&#xff1a;…...

生物化学笔记:医学免疫学原理 免疫系统的组成与功能+克隆选择学说

免疫系统的组成与功能 克隆选择学说 克隆选择学说&#xff08;Clonal Selection Theory&#xff09;是免疫学的核心理论之一&#xff0c;由 麦克法兰伯内特&#xff08;Frank Macfarlane Burnet&#xff09; 在 1957 年提出&#xff0c;用于解释特异性免疫反应的机制。 基本概…...

Android 15 获取网络切片信息的标准接口

相关术语 简称全称中文说明URSPUE Route Selection Policy用户路由选择策略URSP 是 5G 核心网(PCF)下发给 UE 的策略,用于指导应用流量如何路由到不同的网络切片或 PDU 会话。其包含多个规则,每条规则由 优先级、业务描述符(Traffic Descriptor) 和 路由选择描述符(Rout…...

MySql创建分区表并且按月分区

前言 在mysql中&#xff0c;按月份分区&#xff0c;再使用分区字段时间来查询数据将会很快&#xff0c;因为这样只需要扫描指定的分区。因此&#xff0c;在处理大量数据时&#xff0c;使用分区表是一个非常好的选择。 1、创建表&#xff0c;并使用RANGE COLUMNS分区 按创建时间…...

招聘面试季--一文顿悟,Java中字节流和字符流的区别及使用场景上的差异

‌一、核心区别‌ ‌特性‌‌字节流‌‌字符流‌‌数据单位‌以字节&#xff08;8-bit&#xff09;为单位处理数据&#xff08;如0xA1&#xff09;以字符&#xff08;16-bit Unicode&#xff09;为单位处理数据&#xff08;如A, 你&#xff09;‌基类‌InputStream / OutputSt…...

使用【docker】+【shell】脚本半自动化部署微服务项目

一.前言 以下是一个基于 ‌Docker Shell脚本‌ 的半自动化部署方案&#xff0c;包含镜像构建、容器管理、网络配置和日志监控等核心功能&#xff0c;适用于大多数Web应用或微服务项目。 二‌.目录结构 三.脚本代码实现 1.‌Shell脚本实现 (deploy.sh) #!/bin/bash# 设置颜…...

uni-app——计时器和界面交互API

API 基本概要 概念说明 API&#xff08;应用程序接口&#xff09;是预先定义的方法集合&#xff0c;用于实现特定功能。在 uni-app 中&#xff0c;通过全局对象 uni 调用 API&#xff0c;例如 uni.getSystemInfoSync 获取设备信息。 API 分类与调用规则 事件监听型 以 on 开…...

使用 GitHub 可重用工作流和 GitHub Actions 简化 DevOps

在当今的 DevOps 环境中&#xff0c;自动化是开发团队能够更快地交付功能并维护高质量代码库的关键。这就是像 GitHub Actions 这样的工具变得不可或缺的地方&#xff0c;因为它能够直接在存储库中自动化、自定义和执行 GitHub 工作流程。 当然&#xff0c;随着项目的规模和存…...

深入理解MySQL日志机制

目录 1. MySQL日志概述 2. 错误日志&#xff08;Error Log&#xff09; 2.1 错误日志的作用 2.2 错误日志的配置 2.3 查看错误日志 3. 二进制日志&#xff08;Binary Log&#xff09; 3.1 二进制日志的作用 3.2 二进制日志的配置 3.3 查看二进制日志 3.4 二进制日志的…...

Sql Server 索引性能优化 分析以及分表

定位需优化语句 根据工具 skywking 或者开启慢查询日志 找到 慢sql 的语句根据 执行过程 来 判断 慢的原因 row filter 指标 看查了多少数据 比例多少 type 看下是单表 还是 join联表 比如 执行步骤多 没索引 优化方向 减少执行次数索引 没索引考虑加索引 加索引 尽量选择 i…...

vue使用element-ui自定义样式思路分享【实操】

前言 在使用第三方组件时&#xff0c;有时候组件提供的默认样式不满足我们的实际需求&#xff0c;需要对默认样式进行调整&#xff0c;这就需要用到样式穿透。本篇文章以vue3使用element-ui的Tabs组件&#xff0c;对Tabs组件的添加按钮样式进行客制化为例。 确定需要修改的组…...

2020年全国职业院校技能大赛改革试点赛高职组“云计算”竞赛赛卷第二场次题目:容器云平台部署与运维

2020年全国职业院校技能大赛改革试点赛高职组 “云计算”竞赛赛卷 第二场次题目:容器云平台部署与运维 说明:本任务提供有2台服务器master和node,都安装了centos7.5操作系统,在/opt/centos目录下有CentOS-7-x86_64-DVD-1804系统光盘文件所有文件,在/opt/containerk8s目…...

PowerBI 条形图,解决数据标签在条形内部看不清的问题

比如下面的条形图&#xff1a; 最上面两行&#xff0c;数据标签显示在了条形内部&#xff0c;哪怕设置了值为黑色 字体也会自动切换为白色&#xff0c;如果设计要求条形的颜色是浅色&#xff0c;就会导致数据看不清晰。 解决方法一&#xff1a; 将数据标签位置设置为端外 效果…...

下载与快速上手 NVM:Node.js 版本管理工具

一、准备工作&#xff1a;卸载旧版 Node.js 重要提示&#xff1a;在安装 NVM 前&#xff0c;请先彻底删除已安装的 Node.js&#xff0c;避免路径冲突&#xff1a; 检查安装路径 bash where node常见路径&#xff1a; C:\Program Files\nodejs\C:\Users\用户名\AppData\Local\n…...

网络防火墙(Firewall)、Web防火墙(WAF)、入侵检测系统(IDS)、入侵防御系统(IPS)对比总结

目录 一、Firewall、WAF、IDS、IPS四种设备简介 二、Firewall、WAF、IDS、IPS四种设备的角色定位 三、防火墙&#xff08;Firewall&#xff09;与入侵检测系统&#xff08;IPS&#xff09;的区别 四、入侵检测系统&#xff08;IDS&#xff09;与入侵防御系统&#xff08;IP…...