使用 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 位。
相反,转换器正在创建一个混合模型,其中权重被量化,但模型的其余部分保留为浮点数。这种技术已证明可以提供大型模型压缩优势,同时减少量化造成的精度下降。
要创建真正的量化模型,您必须了解量化感知训练。
我正在尝试将 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 位。
相反,转换器正在创建一个混合模型,其中权重被量化,但模型的其余部分保留为浮点数。这种技术已证明可以提供大型模型压缩优势,同时减少量化造成的精度下降。
要创建真正的量化模型,您必须了解量化感知训练。