tensorflow伪量化

本文介绍了TensorFlow中两种量化方法:伪量化与post-training量化。伪量化适用于训练阶段,通过插入fake quantization节点来记录min-max范围信息;post-training量化则是在模型训练完成后直接进行权重量化。文中还提供了相关论文与博客链接供进一步学习。

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

tensorflow量化
这个链接里面解决了很多问题https://www.tensorflowers.cn/t/7136
这是社区Zongjun对一些问题的解答:
用toco生成的量化有两个途径:
1.提到的伪量化,这个确实在training时要调用你说的这两句。具体展开:要生成两个graph,一个用于training,在compute gradients前使用create_training_graph,因为forward和backward都需要模拟量化。这个过程其实是找到需要量化的变量,插入fake quantization nodes 来记录 min-max range information。再具体一点:见(*)。另一个graph用于eval,要在import_graph_def后,saver.restore前插入create_eval_graph。后面如何freeze如何调用toco,按照这个链接上说的即可:https://github.com/tensorflow/te…ow/contrib/quantize
2. post-training quantization。顾名思义,无需伪量化,是toco拿过来一个pb file,直接把toco的post-training quantization flag设成true完成的。但是注意,这个方法只quantize weights,而1.是一个fully quantized model. 并且2.在inference时,会把uint8的weights再转换回float32来做矩阵乘法。所以,2.这个方法其实依然相当于没做quantization。它的存在应当只是便于用户转移model,计算时依然是个非量化model。链接:https://www.tensorflow.org/performance/post_training_quantization

量化的两篇论文
谷歌原文:https://arxiv.org/abs/1712.05877
qualcomm论文:https://arxiv.org/abs/1803.08607

关于伪量化其中讲得比较详细得两篇博客
https://blog.youkuaiyun.com/angela_12/article/details/85000072
https://blog.youkuaiyun.com/u012101561/article/details/86321621#commentsedit
————————————————
版权声明:本文为优快云博主「songxaiohong」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/songxiaoxiaosong/article/details/96424739

### TensorFlow 中量化感知训练的方法 量化感知训练(Quantization Aware Training, QAT)是一种用于模拟量化效果的技术,它通过在浮点模型上引入伪量化操作来实现。这种方法允许网络学习适应低精度表示的能力,在部署到资源受限设备时能够显著减少计算开销并提高推理速度。 #### 方法概述 QAT 的核心思想是在训练过程中加入虚拟的量化和反量化的节点,从而让模型逐渐适应量化带来的误差。具体来说,权重和激活会被假定为整数形式处理,尽管实际上它们仍然是以 `float32` 存储[^3]。这种技术通常应用于卷积神经网络和其他密集层结构中。 以下是关于如何实施 Quantization Aware Training 的指南: #### 实现步骤说明 1. **加载预定义模型** 需要先构建或者导入一个标准的 Keras 模型作为基础架构。 ```python import tensorflow as tf # 加载 MNIST 数据集为例 mnist = tf.keras.datasets.mnist (train_images, train_labels), (test_images, test_labels) = mnist.load_data() # 归一化输入图像至 [0, 1] train_images = train_images / 255.0 test_images = test_images / 255.0 # 构建简单的 CNN 模型 model = tf.keras.Sequential([ tf.keras.layers.InputLayer(input_shape=(28, 28)), tf.keras.layers.Reshape(target_shape=(28, 28, 1)), tf.keras.layers.Conv2D(filters=12, kernel_size=(3, 3), activation='relu'), tf.keras.layers.MaxPooling2D(pool_size=(2, 2)), tf.keras.layers.Flatten(), tf.keras.layers.Dense(10) ]) ``` 2. **应用量化配置** 使用 TensorFlow Model Optimization Toolkit 提供的功能对上述模型进行改造,使其支持量化感知训练模式。 ```python import tensorflow_model_optimization as tfmot # 定义量化参数 quantize_model = tfmot.quantization.keras.quantize_model # 应用量化修改器于原始模型之上 q_aware_model = quantize_model(model) # 编译新创建的量化感知版本模型 q_aware_model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics=['accuracy']) ``` 3. **执行训练过程** 接下来按照常规方式完成整个训练周期即可。值得注意的是,由于加入了额外的操作符,因此每轮迭代所需时间可能会有所增加。 ```python train_images_subset = train_images[:1000] # 减少样本数量加快演示进度 train_labels_subset = train_labels[:1000] q_aware_model.fit(train_images_subset, train_labels_subset, batch_size=500, epochs=1, validation_split=0.1) ``` 4. **评估性能差异** 训练完成后分别测试未经过任何转换的标准模型以及刚刚得到的量化感知版的表现指标对比情况。 ```python _, baseline_model_accuracy = model.evaluate( test_images, test_labels, verbose=0) _, q_aware_model_accuracy = q_aware_model.evaluate( test_images, test_labels, verbose=0) print('Baseline test accuracy:', baseline_model_accuracy) print('Quantization aware test accuracy:', q_aware_model_accuracy) ``` 5. **导出最终产物** 当确认满足预期目标之后,则可进一步将其转化为适合特定硬件平台使用的格式文件,比如 TFLite 或 ONNX 等。 ```python converter = tf.lite.TFLiteConverter.from_keras_model(q_aware_model) converter.optimizations = [tf.lite.Optimize.DEFAULT] tflite_quant_model = converter.convert() with open('mnist_qat.tflite', 'wb') as f: f.write(tflite_quant_model) ``` #### 进阶技巧提示 如果希望获得更加精确的结果,还可以考虑采用动态范围估计策略调整初始阈值设定;另外针对某些特殊场景可能还需要自定义插件扩展默认功能集合[^1]。 #### 教程推荐链接 对于初学者而言,可以通过参加在线教育平台上开设的相关课程深入理解机器学习原理及其工程实践要点[^4]: - Coursera 上由吴恩达教授主持的《深度学习专项》系列讲座; - Udacity 平台上的 CUDA 编程入门指导资料包; - edX 提供来自 IBM 技术团队制作的 PyTorch 版本教程文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值