Я использовал Keras для настройки MobileNet v1.Теперь у меня есть model.h5
, и мне нужно преобразовать его в TensorFlow Lite, чтобы использовать его в приложении для Android.
Я использую преобразование TFLite script tflite_convert
.Я могу преобразовать его без квантования, но мне нужно больше производительности, поэтому мне нужно выполнить квантование.
Если я запусту этот скрипт:
tflite_convert --output_file=model_quant.tflite \
--keras_model_file=model.h5 \
--inference_type=QUANTIZED_UINT8 \
--input_arrays=input_1 \
--output_arrays=predictions/Softmax \
--mean_values=128 \
--std_dev_values=127 \
--input_shape="1,224,224,3"
Сбой:
F tenorflow / contrib / lite / toco / tooling_util.cc: 1634] Массив conv1_relu / Relu6, который является входом для оператора DepthwiseConv, создающего выходной массив conv_dw_1_relu / Relu6, не содержит данных min / max, которые необходимы для квантования.Если точность имеет значение, либо нацеливайтесь на неквантованный выходной формат, либо запустите квантованное обучение с вашей моделью из контрольной точки с плавающей запятой, чтобы изменить входной график, содержащий минимальную / максимальную информацию.Если вас не волнует точность, вы можете передать --default_ranges_min = и --default_ranges_max = для удобства экспериментов. \ NAborted (core dumped) \ n "
Если я использую default_ranges_min
иdefault_ranges_max
(называемый «фиктивным квантованием»), он работает, но он предназначен только для отладки производительности без точности, как описано в журнале ошибок.
Итак, что мне нужно сделать, чтобы модель Keras была корректно квантована? Нужно ли искать лучшие default_ranges_min
и default_ranges_max
? Как? Или речь идет об изменениях в фазе обучения Keras?
Версии библиотеки:
Python 3.6.4
TensorFlow 1.12.0
Keras 2.2.4