我正在使用TF1.12将具有两个conv2d层的简单mnist模型转换为TF-lite。
F32:
`*tflite_convert --output_file model_lite/conv_net_f32.tflite \
--graph_def_file frozen_graphs/conv_net.pb \
--input_arrays "input" \
--input_shapes "1,784" \
--output_arrays output \
--output_format TFLITE*`
UINT8:
tflite_convert --output_file model_lite/conv_net_uint8.tflite \
--graph_def_file frozen_graphs/conv_net.pb \
--input_arrays "input" \
--input_shapes "1,784" \
--output_arrays output \
--output_format TFLITE \
--mean_values 0\
--std_dev_values 255\
--default_ranges_min 0 \
--default_ranges_max 255 \
--inference_type QUANTIZED_UINT8 \
--inference_input_type QUANTIZED_UINT8*
但是我发现量化的uint8版本的执行时间比f32慢。
结果:
对我来说这没有意义。
有人知道原因吗?
感谢您的任何输入!
我认为您应该尝试使用以下命令进行转换:
tflite_convert --output_file model_lite/conv_net_uint8.tflite \
--graph_def_file frozen_graphs/conv_net.pb \
--input_arrays "input" \
--input_shapes "1,784" \
--output_arrays output \
--output_format TFLITE \
--mean_values 128\
--std_dev_values 127
--default_ranges_min 0 \
--default_ranges_max 1 \
--inference_type QUANTIZED_UINT8 \
--inference_input_type QUANTIZED_UINT8*
default_ranges_min
和default_ranges_max
对应于网络的最大值和最小值,如激活功能范围内。如果使用的激活方式为relu6
,则应将default_ranges_max
更改为6
。
有关this和mean_values
的信息,请参见std_dev_values
堆栈溢出问题。它们取决于您的训练数据。