所以我训练了带有伪量化的张量流模型,并使用.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并进行转换。请注意,Google将mean_values设置为0,并将std_values设置为2。他们如何计算这两个值?对于此特定模型,经过训练可以识别单词“是”和“否”。如果我想识别10位数字,在这种情况下需要更改均值和标准差值怎么办?我没有找到任何说明此部分的官方文档。任何帮助,将不胜感激。
答案 0 :(得分:2)
对于uint8量化模型,输入值应在0到255之间。即使使用FakeQuantization,训练期间的输入值也经常是在不同范围内的浮点值(例如0.0到1.0)。 mean_value和std_value控制范围为0到255的uint8值如何映射到训练期间使用的浮点值。您可以使用这种启发式方法来确定这些值:
mean_value =对应于浮点0.0的[0,255]范围内的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。
我们正在研究简化方法。希望这会有所帮助!