Ошибка распределения тензорной глубины - PullRequest
0 голосов
/ 06 января 2019

Системная информация

Написал ли я собственный код (в отличие от сценария со стандартным примером, предоставленным в TensorFlow): да Платформа ОС и распространение (например, Linux Ubuntu 16.04): Mac OS Mojave Мобильное устройство (например, iPhone 8, Pixel 2, Samsung Galaxy), если проблема возникает на мобильном устройстве: нет данных TensorFlow установлен из (источника или двоичного файла): двоичный Версия TensorFlow (используйте команду ниже): 1.12 Версия Python: 3.6.4 Базельская версия (если компилируется из исходного кода): N / A Версия GCC / Compiler (если компилируется из исходного кода): N / A Версия CUDA / cuDNN: N / A Модель и память графического процессора: N / A Опишите текущее поведение

java.lang.IllegalStateException: Internal error: Unexpected failure when preparing tensor allocations: tensorflow/contrib/lite/kernels/depthwise_conv.cc:92 NumDimensions(input) != 4 (0 != 4)Node number 0 (DEPTHWISE_CONV_2D) failed to prepare.

Я строю модель с:

interpreter = Interpreter(loadModelFile("model.tflite"), object: Interpreter.Options() { override fun setAllowFp16PrecisionForFp32(allow: Boolean): Interpreter.Options { return super.setAllowFp16PrecisionForFp32(true) } override fun setUseNNAPI(useNNAPI: Boolean): Interpreter.Options { return super.setUseNNAPI(true) } })

и вызовите его с помощью:

imgData = ByteBuffer.allocateDirect(4 * 100 * 100).apply { order(nativeOrder()) }.asFloatBuffer() labelProbArray = IntArray(1) interpreter.run(imgData, labelProbArray as Any)

Опишите ожидаемое поведение Ожидаемое поведение состоит в том, что байтовый буфер будет преобразован в тензоры с плавающей точкой32 под капотом согласно заполнителю op.

1 Ответ

0 голосов
/ 08 февраля 2019

Вам нужно передать выделенный дескриптор ByteBuffer, а не возвращаемый дескриптор asFloatBuffer(). Сообщение об ошибке немного вводит в заблуждение, основная проблема в том, что API поддерживает типы ByteBuffer, но еще не поддерживает или не понимает типы FloatBuffer. Сообщение об ошибке будет более понятным в следующей ночной сборке (см. Также это исправление ), и мы работаем над добавлением встроенной поддержки FloatBuffer.

...