Tensorflow Lite 触及 --mean_values --std_values 了吗?

Tensorflow Lite toco --mean_values --std_values?

所以我用伪量化训练了一个tensorflow模型,并用.pb文件作为输出冻结它。现在我想将这个 .pb 文件提供给 tensorflow lite toco 进行完全量化并获取 .tflite 文件。

我正在使用这个张量流示例:https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/experimental/micro/examples/micro_speech

我有疑问的部分:

bazel run tensorflow/lite/toco:toco -- \
--input_file=/tmp/tiny_conv.pb --output_file=/tmp/tiny_conv.tflite \
--input_shapes=1,49,43,1 --input_arrays=Reshape_1 --output_arrays='labels_softmax' \
--inference_type=QUANTIZED_UINT8 --mean_values=0 --std_values=2 \
--change_concat_input_ranges=false

以上部分调用了toco并进行了转换。注意,mean_values被设置为0,std_values被Google设置为2。他们是如何计算这两个值的?对于这个特定的模型,它被训练来识别单词 "yes" 和 "no"。如果我想识别这 10 位数字,在这种情况下是否需要更改均值和标准值?我没有找到说明这部分的任何官方文档。任何帮助,将不胜感激。

对于 uint8 量化模型,输入值应在 0 到 255 范围内。即使使用 FakeQuantization,训练期间的输入值通常是不同范围内的浮点值(例如,0.0 到 1.0)。 mean_value 和 std_value 控制 0 到 255 范围内的 uint8 值如何映射到训练期间使用的浮点值。您可以使用此试探法来确定这些值:

mean_value = [0, 255] 范围内对应浮点数 0.0 的 uint8 值。所以如果浮点范围是[0.0, 1.0],那么mean_value = 0.

std_value = (uint8_max - uint8_min) / (float_max - float_min)。所以如果浮点范围是[0.0, 1.0],那么std_value = 255 / 1.0 = 255.

我们正在努力使这更简单。希望这对您有所帮助!