使用 tf.lite.Optimize.DEFAULT 后,并非 DNN 模型中的所有值都被量化

Not all the values in DNN model are quantized after using tf.lite.Optimize.DEFAULT

我正在尝试将 DNN 模型的 .pb 格式更改为 .tflite,我还想量化所有权重和偏差。使用以下代码时,权重以 8 位量化,但偏差仍然是浮点数。

我已经使用了最新版本的 tf-nightly。代码是:

import tensorflow as tf

graph_def_file = "DNN_S.pb"

converter=tf.lite.TFLiteConverter.from_frozen_graph(graph_def_file,input_arrays,output_arrays,input_shapes)

converter.target_spec.supported_ops=[tf.lite.OpsSet.TFLITE_BUILTINS,tf.lite.OpsSet.SELECT_TF_OPS]

converter.optimizations = [tf.lite.Optimize.DEFAULT]

tflite_model = converter.convert()

open("model.tflite", "wb").write(tflite_model)

如何将偏差的格式也更​​改为 8 位整数?

当您在 TensorFlow Lite 中进行 post 训练量化时,您实际上并没有将整个模型转换为 8 位。

相反,转换器正在创建一个混合模型,其中权重被量化,但模型的其余部分保留为浮点数。这种技术已证明可以提供大型模型压缩优势,同时减少量化造成的精度下降。

要创建真正的量化模型,您必须了解量化感知训练。