Я только что закончил учебник TensorFlow для поэтов 2: TFLite (https://codelabs.developers.google.com/codelabs/tensorflow-for-poets-2-tflite/#0). В конце учебного курса я смог запустить MobileNet, предоставленный в учебном пособии, на моем телефоне.
Теперь я пытаюсь заменить MobileNet из учебника на MobileNet, который я обучил с нуля, используя MobileNet из репозитория Tensorflow. Однако при попытке использовать TOCO я получаю ошибку сегментации. Если я использую optimize_for_inference
, я получаю предупреждения вроде
ПРЕДУПРЕЖДЕНИЕ: тензорный поток: неправильная форма для среднего, найденного (0,), ожидаемого (32,), для узла MobilenetV1 / Conv2d_0 / BatchNorm / FusedBatchNorm
ВНИМАНИЕ: тензорный поток: не удалось найти ожидаемый ввод Conv2D в 'MobilenetV1 / Conv2d
optimize_for_inference
depthwise / BatchNorm / FusedBatchNorm'
Я сравнил график файла pb из учебника с графиком из репозитория и заметил, что есть разница в способе представления пакетной нормы. По сути, пакетная норма модели, представленной в руководстве, просто имеет свертку с последующим добавлением, в то время как модель из репозитория имеет оператор FusedBatchNorm. Я тоже пытался установить fused=False
, но потом получаю такую ошибку:
/opt/conda/lib/python3.6/site-packages/h5py/
__init__
.py:36: FutureWarning: преобразование второго аргумента issubdtype изfloat
вnp.floating
устарело. В будущем он будет считатьсяnp.float64 == np.dtype(float).type
.из ._conv импортировать register_converters как _register_converters
2018-05-09 11: 51: 38.419786: W tensorflow / contrib / lite / toco / toco_cmdline_flags.cc: 178] --input_type устарел. Это был неоднозначный флаг, который устанавливал как --input_data_types, так и --inference_input_type. Если вы пытаетесь дополнить входной файл информацией о типе входных массивов, используйте --input_data_type. Если вы пытаетесь управлять квантованием / деквантованием входных массивов действительных чисел в выходном файле, используйте --inference_input_type.
2018-05-09 11: 51: 38.781372: I tensorflow / contrib / lite / toco / import_tensorflow.cc: 1057] Преобразование неподдерживаемой операции: SquaredDifference
2018-05-09 11: 51: 38.781693: I tensorflow / contrib / lite / toco / import_tensorflow.cc: 1057] Преобразование неподдерживаемой операции: SquaredDifference
2018-05-09 11: 51: 38.781864: I tensorflow / contrib / lite / toco / import_tensorflow.cc: 1057] Преобразование неподдерживаемой операции: SquaredDifference
2018-05-09 11: 51: 38.782019: I tensorflow / contrib / lite / toco / import_tensorflow.cc: 1057] Преобразование неподдерживаемой операции: SquaredDifference
2018-05-09 11: 51: 38.782181: I tensorflow / contrib / lite / toco / import_tensorflow.cc: 1057] Преобразование неподдерживаемой операции: SquaredDifference
2018-05-09 11: 51: 38.782329: I tensorflow / contrib / lite / toco / import_tensorflow.cc: 1057] Преобразование неподдерживаемой операции: SquaredDifference
2018-05-09 11: 51: 38.782508: I tensorflow / contrib / lite / toco / import_tensorflow.cc: 1057] Преобразование неподдерживаемой операции: SquaredDifference
2018-05-09 11: 51: 38.782663: I tensorflow / contrib / lite / toco / import_tensorflow.cc: 1057] Преобразование неподдерживаемой операции: SquaredDifference
2018-05-09 11: 51: 38.782851: I tensorflow / contrib / lite / toco / import_tensorflow.cc: 1057] Преобразование неподдерживаемой операции: SquaredDifference
2018-05-09 11: 51: 38.783009: I tensorflow / contrib / lite / toco / import_tensorflow.cc: 1057] Преобразование неподдерживаемой операции: SquaredDifference
2018-05-09 11: 51: 38.783211: I tensorflow / contrib / lite / toco / import_tensorflow.cc: 1057] Преобразование неподдерживаемой операции: SquaredDifference
2018-05-09 11: 51: 38.783352: I tensorflow / contrib / lite / toco / import_tensorflow.cc: 1057] Преобразование неподдерживаемой операции: SquaredDifference
2018-05-09 11: 51: 38.783561: I tensorflow / contrib / lite / toco / import_tensorflow.cc: 1057] Преобразование неподдерживаемой операции: SquaredDifference
2018-05-09 11: 51: 38.832089: I tensorflow / contrib / lite / toco / graph_transformations / graph_transformations.cc: 39] До общих преобразований графов: 656 операторов, 874 массива (0 квантованных)
2018-05-09 11: 51: 39.037810: I tensorflow / contrib / lite / toco / graph_transformations / graph_transformations.cc: 39] После общих преобразований графа проходят 1: 222 операторов, 435 массивов (0 квантованных)
2018-05-09 11: 51: 39.041366: I tensorflow / contrib / lite / toco / graph_transformations / graph_transformations.cc: 39] Перед преобразованием графа деквантованием: 222 оператора, 435 массивов (0 квантованных)
2018-05-09 11: 51: 39.044092: I tensorflow / contrib / lite / toco / allocate_transient_arrays.cc: 313] Общий выделенный размер временного массива: 4333824 байта, теоретическое оптимальное значение: 4333696 байтов.
2018-05-09 11: 51: 39.045179: F tensorflow / contrib / lite / toco / tflite / export.cc: 303] Некоторые операторы в модели не поддерживаются стандартной средой выполнения TensorFlow Lite. Если у вас есть индивидуальная реализация для них, вы можете отключить эту ошибку с помощью --allow_custom_ops. Вот список операторов, для которых вам потребуются специальные реализации: Mean, RSQRT, SquaredDifference, Squeeze.
Прервано (ядро выгружено)
Я предполагаю, что можно преобразовать оператор FusedBatchNorm
в комбинацию свертки / сложения с помощью TOCO или другого скрипта. Это правда? И если да, то где мне найти скрипт конвертации?