Jav*_*vaa 2 tensorflow tensorflow-lite
所以我用假量化训练了一个 tensorflow 模型,并用 .pb 文件作为输出将其冻结。现在我想将此 .pb 文件提供给 tensorflow lite toco 以进行完全量化并获取 .tflite 文件。
我正在使用这个 tensorflow 示例: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
Run Code Online (Sandbox Code Playgroud)
上面的部分调用 toco 并进行转换。请注意,Google 将 mean_values 设置为 0,std_values 设置为 2。他们是如何计算这两个值的?对于这个特定的模型,它被训练来识别单词“是”和“否”。如果我想识别 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。
我们正在努力使这变得更简单。希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
2401 次 |
| 最近记录: |