Tensorflow量化步骤及生成量化的tflite(1)

本文介绍了Tensorflow量化的步骤,包括安装Tensorflow、量化工具的编译,以及模型的压缩和转换为tflite格式。量化过程适用于已有网络的.pb文件,通过量化减少模型大小,提高在硬件加速器上的运行效率。文章还提到了可能出现的问题及其解决方案,并推荐了相关工具如tensorboard和Netron进行模型可视化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一部分:Tensorflow量化安装及使用

第二部分伪量化训练在这里:
https://blog.youkuaiyun.com/angela_12/article/details/85000072#commentsedit

为什么需要量化:

(参照社区问题中Zongjun大神的回答)
“如果是在android 上,Tensorflow Lite (tflite) 可以利用hardware accelerator,应该是更快的。量化只是一个float32到uint8的过程,本质上是weights\bias大小的变化(是原来的25%),有的microcontroller太小,不量化根本就放不进去,并且mircocontroller大部分是8bit计算,float32非常昂贵,所以需要量化。”

本博客时间有延迟,现在谷歌删掉了以前在tensorflow/tools/quantization文件夹里的的quantize_graph.py工具,所以以前的工具不能用了(也可以去网上找到那部分下载看看)
之前用量化工具做量化的时候是2018年7月19号,时间有点久远,但因为之前做过了现在想整理一下所以还是写出来记录一下~
我目前没有环境,所以就没法验证,先写着,等过段时间试试有没有问题,不过应该没啥问题,哈哈。

量化步骤:

1.源码安装TensorFlow(简称TF)及相关库:

git clone https://github.com/tensorflow/tensorflow

参考源码安装博客
注: TF最好安装在虚拟环境里,这个可以找下如何在Linux里安装虚拟环境virtualenv,然后使用的时候先进入虚拟环境中,TF激活virtualenv:
source bin/activate
进入会出现虚拟环境名:(tensorflow)$
退出环境:
(tensorflow)$ deactivate

2.编译:
1)进入tensorflow根目录:
cd tensorflow
2)下载安装bazel编译工具:
bazel官网安装方法,jdk不低于1.8,也是源码安装
可参考:TensorFlow Lite模型生成以及bazel的安装使用
2019.3.27更新: bazel环境重新搭了一遍,感觉不用那么麻烦,这次没有源码安装也可以使用tensorflow的指令,方法就是进入官网,按照官网推荐的二进制安装方法操作,一共四步,按顺序操作即可:

### TensorFlow Lite 量化工具概述 TensorFlow Lite 提供了一套完整的量化工具链来减少模型大小并提高推理速度,同时尽可能保持准确性[^2]。这些工具允许开发者将浮点数模型转换为整数量化模型,从而显著降低内存占用和计算需求。 #### 主要特性 - **动态范围量化 (Dynamic Range Quantization)**:此方法仅对权重进行量化处理,激活函数仍然保留为浮点形式。 - **全整数量化 (Full Integer Quantization)**:不仅限于权重量化,还包括输入/输出张量在内的整个网络都被转化为8位整数表示法。 - **混合精度量化 (Mixed Precision Quantization)**:结合了上述两种方式的优点,在某些层采用更高精度的数据类型以维持性能的同时其他部分则使用较低精度数据类型达到更好的效率平衡。 #### 使用步骤说明 为了利用 TensorFlow Lite 的量化功能,通常遵循如下流程: 1. 训练好一个标准的 TensorFlow 浮点模型; 2. 收集代表性的样本用于校准过程; 3. 应用 `tf.lite.TFLiteConverter` API 进行模型转换,并指定所需的量化选项; 下面是一个简单的 Python 脚本例子展示如何创建一个量化后的 TFLite 模型文件: ```python import tensorflow as tf converter = tf.lite.TFLiteConverter.from_saved_model('path/to/saved/model') converter.optimizations = [tf.lite.Optimize.DEFAULT] # 如果有代表性数据集,则可以设置representative_dataset参数来进行更精确的量化 def representative_data_gen(): for _ in range(100): yield [np.random.uniform(-1, 1, size=(1, *input_shape)).astype(np.float32)] converter.representative_dataset = representative_data_gen tflite_quantized_model = converter.convert() open("quantized_model.tflite", "wb").write(tflite_quantized_model) ``` 这段代码展示了怎样通过提供保存下来的 TensorFlow SavedModel 来构建一个 TFLite Converter 实例,并指定了默认优化策略(即量化),同时也定义了一个生成器函数作为代表性数据源以便更好地调整量化参数[^1].
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值