gpt4 book ai didi

TensorFlow 伪量化层也从 TF-Lite 中调用

转载 作者:行者123 更新时间:2023-12-04 11:44:38 25 4
gpt4 key购买 nike

我正在使用 TensorFlow 2.1 来训练具有量化感知训练的模型。

这样做的代码是:

import tensorflow_model_optimization as tfmot
model = tfmot.quantization.keras.quantize_annotate_model(model)

这将向图中添加假量化节点。这些节点应该调整模型的权重,以便它们更容易量化为 int8 并使用 int8 数据。

训练结束后,我将模型转换并量化为 TF-Lite,如下所示:
converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.representative_dataset = [give data provider]
quantized_tflite_model = converter.convert()

在这一点上,我不希望在 TL-Lite 图中看到假量化层。但令人惊讶的是,我确实看到了它们。
此外,当我在 TF-Lite C++ 中运行这个量化模型时 sample app ,我看到它也在推理过程中运行假量化节点。除此之外,它还对每层之间的激活进行反量化和量化。

这是 C++ 代码的输出示例:

Node 0 Operator Builtin Code 80 FAKE_QUANT
Inputs: 1
Outputs: 237
Node 1 Operator Builtin Code 114 QUANTIZE
Inputs: 237
Outputs: 238
Node 2 Operator Builtin Code 3 CONV_2D
Inputs: 238 59 58
Outputs: 167
Temporaries: 378
Node 3 Operator Builtin Code 6 DEQUANTIZE
Inputs: 167
Outputs: 239
Node 4 Operator Builtin Code 80 FAKE_QUANT
Inputs: 239
Outputs: 166
Node 5 Operator Builtin Code 114 QUANTIZE
Inputs: 166
Outputs: 240
Node 6 Operator Builtin Code 3 CONV_2D
Inputs: 240 61 60
Outputs: 169



所以我觉得这一切都非常奇怪,还考虑到这个模型应该只在 int8 上运行并且实际上假量化节点将 float32 作为输入。

任何帮助在这里将不胜感激。

最佳答案

代表数据集主要用于训练后量化。
将您的命令与 QAT 示例进行比较,您可能希望删除该行。
https://www.tensorflow.org/model_optimization/guide/quantization/training_example

converter = tf.lite.TFLiteConverter.from_keras_model(q_aware_model)
converter.optimizations = [tf.lite.Optimize.DEFAULT]

quantized_tflite_model = converter.convert()


# Create float TFLite model.
float_converter = tf.lite.TFLiteConverter.from_keras_model(model)
float_tflite_model = float_converter.convert()

# Measure sizes of models.
_, float_file = tempfile.mkstemp('.tflite')
_, quant_file = tempfile.mkstemp('.tflite')

with open(quant_file, 'wb') as f:
f.write(quantized_tflite_model)

with open(float_file, 'wb') as f:
f.write(float_tflite_model)

print("Float model in Mb:", os.path.getsize(float_file) / float(2**20))
print("Quantized model in Mb:", os.path.getsize(quant_file) / float(2**20))

关于TensorFlow 伪量化层也从 TF-Lite 中调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62433410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com