C++ 在将pb转换为ff lite时,不理解平均值和标准偏差值
我试图量化存储在.pb中的tensoflow图。 网络的输入是一个矩阵,每一行用平均值0和标准值1标准化。 我想创建一个tensorflow lite模型quantizate以更快地进行交互。 我不知道如何将输入传递到行转换。它只是一个值吗?有64个值的向量?它是如何通过的 模型转换良好,无需量化C++ 在将pb转换为ff lite时,不理解平均值和标准偏差值,c++,tensorflow,tensorflow-lite,quantization,C++,Tensorflow,Tensorflow Lite,Quantization,我试图量化存储在.pb中的tensoflow图。 网络的输入是一个矩阵,每一行用平均值0和标准值1标准化。 我想创建一个tensorflow lite模型quantizate以更快地进行交互。 我不知道如何将输入传递到行转换。它只是一个值吗?有64个值的向量?它是如何通过的 模型转换良好,无需量化 tflite_convert \ --output_file=model_simple_weight_q.tflite \ --graph_def_file=model_simple.
tflite_convert \
--output_file=model_simple_weight_q.tflite \
--graph_def_file=model_simple.pb \
--inference_type=QUANTIZED_UINT8 \
--input_arrays=input \
--output_arrays=LogSoftmax \
--mean_values= # dont know \
--std_dev_values=# dont know
如果我传递两个单值,例如,-mean_values=127和--std_dev_values=128。为了知道发生了什么,我得到了以下错误:
F tensorflow/lite/toco/graph_transformations/resolve_constant_gather.cc:108] Check failed: coords_array.data_type == ArrayDataType::kInt32 Only int32 indices are supported
Aborted (core dumped)
您看到的错误与平均值/标准偏差值无关。一般来说,转换图形时出错。这意味着在一个图形操作中,索引用于
tf.gather
(或者可能是切片),它的类型不是int32
,但这是唯一受支持的索引类型
不幸的是,TFLite转换错误通常不会告诉您导致错误的源代码,因此您必须进行有根据的猜测
关于平均值/标准偏差值,我建议您看看这个答案:由于输入的每一行都用平均值0和标准偏差1标准化,您应该给出
--平均偏差值=0
和--标准偏差值=1
。此外,当您进行“虚拟训练后量化”时,您需要为激活功能提供最小和最大范围。您需要提供--default\u ranges\u min=和--default\u ranges\u max=
由于tensorflow没有提供关于如何计算激活范围的非常清晰的描述,因此最好使用较小的校准数据进行“训练后全整数量化”。在该方法中,使用校准图像计算激活函数的范围
问候,