TF-Lite用于量化感知训练的Toco转换器参数描述

2024-06-08 23:44:33 发布

您现在位置:Python中文网/ 问答频道 /正文

这些天来,我试图追踪一个错误,关于部署一个有TPU支持的TF模型。在

我可以在没有TPU支持的情况下运行一个模型,但是一旦启用量化,我就迷失了方向。在

我的情况如下:

  1. 创建一个模型并训练它
  2. 创建了模型的评估图
  3. 冻结模型并将结果保存为协议缓冲区
  4. 在没有TPU支持的情况下成功地转换和部署了它

最后一点,我使用了tflitecoverter的pythonapi。生成功能性tflite模型的脚本是

import tensorflow as tf

graph_def_file = 'frozen_model.pb'
inputs = ['dense_input']
outputs = ['dense/BiasAdd']

converter = tf.lite.TFLiteConverter.from_frozen_graph(graph_def_file, inputs, outputs)
converter.inference_type = tf.lite.constants.FLOAT
input_arrays = converter.get_input_arrays()

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

tflite_model = converter.convert()

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

这告诉我,到目前为止,我的方法似乎还可以。现在,如果我想利用珊瑚TPU棒,我必须量化我的模型(我在训练中考虑了这一点)。我要做的就是修改我的转换器脚本。我想我得把它改成

^{pr2}$

这个tflite模型在加载解释器的pythonapi时会产生结果,但我无法理解它们的含义。此外,对于如何选择平均值、标准偏差和最小/最大范围,也没有(或者如果有,则隐藏得很好)文档。此外,在用EdGePuxEng编译器编译它并部署它(用C++ API加载)之后,我收到一个错误:

INFO: Initialized TensorFlow Lite runtime.
ERROR: Failed to prepare for TPU. generic::failed_precondition: Custom op already assigned to a different TPU.
ERROR: Node number 0 (edgetpu-custom-op) failed to prepare.

Segmentation fault

我想我在转换过程中漏掉了一个标志什么的。但由于这里也缺少文件,我不能肯定。在

简而言之:

  1. 参数是什么意思,标准偏差,最小值/最大值以及它们如何相互作用?在
  2. 在转换过程中我做错了什么?在

我很感激任何帮助或指导!在

编辑:我用完整的测试代码打开了一个github issue。随便玩玩这个。在


Tags: to模型脚本pythonapiinputmodeltf部署
1条回答
网友
1楼 · 发布于 2024-06-08 23:44:33

你永远不需要手动设置量化统计。在

你试过培训后量化教程吗?在

https://www.tensorflow.org/lite/performance/post_training_integer_quant

基本上,它们设置量化选项:

converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS_INT8]
converter.inference_input_type = tf.uint8
converter.inference_output_type = tf.uint8

然后他们将“代表性数据集”传递给转换器,以便转换器可以运行模型几批以收集必要的统计信息:

^{pr2}$

虽然有量化训练的选择,但训练后量化总是更容易。在

相关问题 更多 >