tensorflow - Tensorflow Lite toco --mean_values --std_values?
问题描述
所以我用假量化训练了一个张量流模型,并用 .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。
我们正在努力使这更简单。希望这可以帮助!
推荐阅读
- mysql - 我无法加载西班牙语/德语特殊字符
- azure - 如何在 Azure 数据工厂中配置动态 httpfile 源?
- javascript - 根据 section 或 href 自动更新导航栏
- asp.net - 如何在asp.net mvc中导出到excel各级分层jqgrid?
- apollo - Apollo 链路状态设置?
- android - 图像裁剪和旋转
- pgadmin-4 - 如何禁用 pgadmin 网络应用程序?
- dart - Flutter:我可以将参数传递给按钮上的 onPress 事件中定义的函数吗?
- jquery - jQuery:检查输入是否具有由浏览器自动填充的值
- python - Python 植入 while 循环,检查文件是否包含新数据