qkeras量化模型-直接搭建模型的量化感知训练

news2024/11/27 11:50:19

量化框架qkeras:

qkeras是谷歌的感知训练量化框架,具有一些功能:

1、支持导入keras模型到qkeras模型;

2、支持剪枝和量化,使用tensorflow lite一起配合,简直不要太好用;

3、支持指定量化函数,量化的bit数目、量化的小数点左边bit数、对称性等;

4、容易扩展,可以使用keras的设计准则自定义构建块去扩展keras的函数,并且发展出sota模型;


qkeras的量化:

1、使用keras搭建的模型,可以直接转换成qkeras的量化模型;

2、使用pytorch、mxnet等其他框架搭建的模型,可以手动转换成qkeras搭建的模型;


示例:
官网的实例直接运行会有比较多的问题,这里改成这样的导入方式,解决问题;并且保留最核心的部分,删除无用语句。

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import tensorflow as tf
from qkeras import *
from qkeras.utils import model_save_quantized_weights
import numpy as np


np.random.seed(42)

NB_EPOCH = 100
BATCH_SIZE = 64
VERBOSE = 1
NB_CLASSES = 10
OPTIMIZER = tf.keras.optimizers.legacy.Adam(lr=0.0001, decay=0.000025)
VALIDATION_SPLIT = 0.1
train = 1

# 1、导入数据;
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
RESHAPED = 784
x_test_orig = x_test
x_train = x_train.astype("float32")
x_test = x_test.astype("float32")
x_train = x_train[..., np.newaxis]
x_test = x_test[..., np.newaxis]
x_train /= 256.0
x_test /= 256.0

y_train = tf.keras.utils.to_categorical(y_train, NB_CLASSES)
y_test = tf.keras.utils.to_categorical(y_test, NB_CLASSES)

# 2、搭建量化模型;
x = x_in = tf.keras.layers.Input(
    x_train.shape[1:-1] + (1,), name="input")
x = QConv2D(
    32, (2, 2), strides=(2,2),
    kernel_quantizer=quantized_bits(4,0,1),
    bias_quantizer=quantized_bits(4,0,1),
    name="conv2d_0_m")(x)
x = QActivation("quantized_relu(4,0)", name="act0_m")(x)
x = QConv2D(
    64, (3, 3), strides=(2,2),
    kernel_quantizer=quantized_bits(4,0,1),
    bias_quantizer=quantized_bits(4,0,1),
    name="conv2d_1_m")(x)
x = QActivation("quantized_relu(4,0)", name="act1_m")(x)
x = QConv2D(
    64, (2, 2), strides=(2,2),
    kernel_quantizer=quantized_bits(4,0,1),
    bias_quantizer=quantized_bits(4,0,1),
    name="conv2d_2_m")(x)
x = QActivation("quantized_relu(4,0)", name="act2_m")(x)
x = tf.keras.layers.Flatten()(x)
x = QDense(NB_CLASSES, kernel_quantizer=quantized_bits(4,0,1),
           bias_quantizer=quantized_bits(4,0,1),
           name="dense")(x)
x = tf.keras.layers.Activation("softmax", name="softmax")(x)

model = tf.keras.Model(inputs=[x_in], outputs=[x])
model.summary()
model.compile(
    loss="categorical_crossentropy", optimizer=OPTIMIZER, metrics=["accuracy"])

# 3、训练模型;
if train:
    history = model.fit(
      x_train, y_train, batch_size=BATCH_SIZE,
      epochs=NB_EPOCH, initial_epoch=1, verbose=VERBOSE,
      validation_split=VALIDATION_SPLIT)
	
    # 4、计算测试准确度;
    score = model.evaluate(x_test, y_test, verbose=VERBOSE)
    print("Test score:", score[0])
    print("Test accuracy:", score[1])

    # 5、保存量化模型;
    model_save_quantized_weights(model)

    #6、打印模型参数shape;
    for layer in model.layers:
      for w, weight in enumerate(layer.get_weights()):
        print(layer.name, w, weight.shape)
	print_qstats(model)

基本逻辑步骤:

1、导入数据;

2、搭建量化模型;

3、训练模型;

4、计算测试准确度;

5、保存量化模型;

6、打印模型参数shape;


依赖版本:

# This file may be used to create an environment using:
# $ conda create --name <env> --file <this file>
# platform: win-64
ca-certificates=2023.01.10=haa95532_0
certifi=2022.12.7=py37haa95532_0
openssl=1.1.1t=h2bbff1b_0
pip=22.3.1=py37haa95532_0
python=3.7.16=h6244533_0
setuptools=65.6.3=py37haa95532_0
sqlite=3.41.2=h2bbff1b_0
vc=14.2=h21ff451_1
vs2015_runtime=14.27.29016=h5e58377_2
wheel=0.38.4=py37haa95532_0
wincertstore=0.2=py37haa95532_2

训练过程:
在这里插入图片描述


参考:

GitHub - google/qkeras: QKeras: a quantization deep learning library for Tensorflow Keras

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何将百度等其他网页设置为谷歌浏览器的首页

原因&#xff1a; 谷歌浏览器默认是https://chrome.google.com/以该网址访问的 如果您想将百度网页设置为谷歌浏览器的首页&#xff0c;可以按照以下步骤进行操作&#xff1a; [ 1 ] 打开您的谷歌浏览器&#xff0c;点击右上角的“三个点”按钮&#xff0c;选择“设置”选项。[…

基于SpringBoot的财务管理系统的设计与实现

背景 财务管理系统能够通过互联网得到广泛的、全面的宣传&#xff0c;让尽可能多的员工了解和熟知财务管理系统的便捷高效&#xff0c;为管理者和员工提供了服务&#xff0c;节省人力、物力和时间&#xff0c;提高工作效率。 系统设计 为了更好的去理清本系统整体思路&#…

深度学习用于医学预后-第二课第四周1-4节-使用线性和基于树的模型构建风险评估模型

今天起进入到第四周课程的学习&#xff0c;使用线性和基于树的模型构建风险评估模型 风险分数 本周&#xff0c;你将学习建立和评估生存预测模型的策略&#xff0c;这些模型将使你能够比较个体患者的风险。您将学习两个这样的模型:Cox比例风险和生存树。最后&#xff0c;您将…

【学习心得】VMware的下载安装与创建Ubuntu虚拟机

Python在Linux系统中的开发环境搭建① 1、VMware的下载安装 1.1 去官方网站下载软件&#xff1a;https://www.vmware.com/ 1.2 在工具中找到workstation pro 1.3 点击试用版本 1.4 点击下载 1.5 双击安装 1.6 下一步 1.7 接受许可 1.8 选择足够空间的磁盘进行安装、勾选增强…

chatgpt赋能Python-pycharm中如何设置滚动条

PyCharm中如何设置滚动条 介绍 PyCharm是一款由JetBrains开发的Python集成开发环境&#xff0c;提供了丰富的功能和工具&#xff0c;让Python开发更加高效和方便。其中一个重要的功能就是滚动条&#xff0c;它可以帮助我们在长篇代码中快速找到需要的部分&#xff0c;并浏览整…

Chrome浏览器更新失败的问题(chrome无法更新至最新版本怎么办)

报错1 如果在计算机上更新 Chrome 时遇到问题&#xff0c;您可能会看到以下错误消息&#xff1a; 更新失败&#xff1a;管理员已停用更新更新失败&#xff08;错误&#xff1a;3 或 11&#xff09;&#xff1a;检查更新时出错&#xff0c;无法访问更新服务器更新失败&#xf…

网络安全学习路线

01 什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防两面…

chatgpt赋能Python-pycharm关联py文件

PyCharm关联Python文件的使用指南 PyCharm作为一款强大的Python开发工具&#xff0c;其集成的许多功能可以大大提高开发效率。其中之一就是PyCharm可以自动关联Python文件&#xff0c;让用户更加方便的进行Python程序的编写。本文将详细介绍PyCharm关联Python文件的使用方法及…

chatgpt赋能Python-pycharm快捷键

PyCharm快捷键大全&#xff1a;提高Python编程效率的秘密武器 在Python开发的过程中&#xff0c;PyCharm是被广泛使用的IDE之一。它可以帮助我们提高效率&#xff0c;省去不少重复性的工作&#xff0c;同时还具有强大的代码自动完成和调试功能。而在PyCharm中&#xff0c;有许…

软考-软件设计师

目录 一、计算机系统 1.1 CPU的功能有&#xff1a; 1.2 运算器的组成 1.3 控制器——不仅要保证程序的正确执行、还要能够处理异常事件 1.3.1 指令控制逻辑 1.4 计算机基本单位 1.5 进制的变换 1.5.1 进制加减法 1.6 原码、反码、补码、移码 1.7 浮点数 1.8 寻址 1…

chatgpt赋能Python-pycharm同一个程序开两个

PyCharm同一个程序开两个&#xff1a;提升编程效率的好帮手 作为一名有10年Python编程经验的工程师&#xff0c;我经常会使用PyCharm作为我的主要编程工具。而在日常的编程工作中&#xff0c;有时会遇到这样一个情况&#xff1a;需要在同一个程序中同时进行两个不同的操作。这…

C++二叉树中序非递归遍历(两种方法)

#include <stdio.h> #include <malloc.h> //树结构 typedef struct kl { int data; struct kl *lchild; struct kl *rchild; }bittree; //栈结构 typedef struct ji { int top; bittree **data; int size; }stack; //初始化栈 void in…

Linux 基金会开源教育及人才培养峰会来了

开源技术正在快速发展&#xff0c;在云计算、大数据、人工智能等领域逐步形成技术主流。作为一种新的软件生产方式&#xff0c;开源已经被列入“十四五”规划纲要。纲要提出&#xff0c;支持数字技术开源社区等创新联合体发展&#xff0c;完善开源知识产权和法律体系&#xff0…

10.从架构师角度理解MySQL性能优化和索引合并

MySQL性能调优 1. 查询性能优化1.1 什么是慢查询1.2 慢查询的配置1.3 慢查询解读分析1.3.1 日志模式1.3.2 慢查询分析mysqldumpshow 1.4 优化SQL查询方法论1.4.1 业务层--请求了不需要的数据&#xff1f;查询不需要的记录总是取出全部列重复查询相同的数据 1.4.2 执行层--是否在…

File和IO流

1、File 1.1、何为File&#xff1f; File类的对象代表操作系统的文件&#xff08;文件、文件夹&#xff09; File类提供了诸如&#xff1a;创建文件对象代表文件&#xff0c;获取文件信息&#xff08;大小、修改时间&#xff09;、删除文件、创建文件&#xff08;文件夹&…

chatgpt赋能Python-pandas归一化python

Pandas归一化Python教程 越来越多的数据分析和机器学习应用需要将数据归一化&#xff0c;以保证数据的统一性和可比性。Pandas是Python中最常用的数据处理库之一&#xff0c;它提供了许多常用的方法&#xff0c;包括数据归一化。本教程将介绍如何使用Pandas进行数据归一化&…

Springboot地方废物回收机构管理的设计与实现

背景 地方废物回收机构的需求和管理上的不断提升&#xff0c;地方废物回收机构管理的潜力将无限扩大&#xff0c;地方废物回收机构管理系统在业界被广泛关注&#xff0c;本系统及对此进行总体分析&#xff0c;将地方废物回收机构信息管理的发展提供参考。地方废物回收机构管理…

回归预测 | MATLAB实现基于贝叶斯线性回归(Bayesian Regression)的多变量输入回归预测

回归预测 | MATLAB实现基于贝叶斯线性回归(Bayesian Regression)的多变量输入回归预测 目录 回归预测 | MATLAB实现基于贝叶斯线性回归(Bayesian Regression)的多变量输入回归预测预测效果基本介绍模型描述程序设计参考资料预测效果 基本介绍 Matlab实现基于贝叶斯线性回归(Bay…

为什么要放弃 $ 语法糖提案

《最新&#xff0c;Vue 中的响应性语法糖已废弃》 本文标题中的 $ 语法糖指的就是上文中的响应式语法糖 (Reactivity Transform)&#xff0c;那为什么不写 Reactivity Transform 呢&#xff1f;因为这个名实在是太长了… 大家觉得被废弃是因为分不清是正常变量还是响应式变量…