// Prepare input tensor
val inputFeature0 = TensorBuffer.createFixedSize(inputShape, DataType.FLOAT32)
inputFeature0.loadArray(flatArray)
// Run inference
val outputs = model?.process(inputFeature0)
val rawOutputBuffer = outputs?.outputFeature0AsTensorBuffer
// Extract raw data as IntArray or FloatArray based on the data type
val outputArray = when (rawOutputBuffer?.dataType) {
DataType.INT32 -> rawOutputBuffer.intArray // Directly access INT32 data
DataType.FLOAT32 -> rawOutputBuffer.floatArray.map { it.toInt() }.toIntArray() // Convert FloatArray to IntArray
else -> throw IllegalArgumentException("Unsupported output tensor data type: ${rawOutputBuffer?.dataType}")
}
Входной тензор имеет тип FLOAT32, и входные данные загружаются правильно с помощью TensorBuffer.createFixedSize() и loadArray().
Я разрабатываю приложение в Android Studio, используя модель TensorFlow Lite. При запуске приложения я сталкиваюсь со следующей ошибкой: [code]java.lang.AssertionError: TensorFlow Lite does not support data type INT32 [/code] Ниже приведена соответствующая часть моего кода: [code]// Prepare input tensor val inputFeature0 = TensorBuffer.createFixedSize(inputShape, DataType.FLOAT32) inputFeature0.loadArray(flatArray)
// Run inference val outputs = model?.process(inputFeature0) val rawOutputBuffer = outputs?.outputFeature0AsTensorBuffer
// Extract raw data as IntArray or FloatArray based on the data type val outputArray = when (rawOutputBuffer?.dataType) { DataType.INT32 -> rawOutputBuffer.intArray // Directly access INT32 data DataType.FLOAT32 -> rawOutputBuffer.floatArray.map { it.toInt() }.toIntArray() // Convert FloatArray to IntArray else -> throw IllegalArgumentException("Unsupported output tensor data type: ${rawOutputBuffer?.dataType}") } [/code] [list] [*]Входной тензор имеет тип FLOAT32, и входные данные загружаются правильно с помощью TensorBuffer.createFixedSize() и loadArray().
[*]При обработке выходного тензора модели ([code]outputFeature0AsTensorBuffer[/code]), я добавил проверки для обработки выходных данных FLOAT32 и INT32.
[*]Несмотря на это, приложение вылетает с ошибкой, указывающей, что TensorFlow Lite не поддерживает INT32.
[/list] Что я пробовал : [list] [*]Убедено, что входной тензор использует FLOAT32. [*]Проверено, что модель TensorFlow Lite совместима с типом данных FLOAT32. [*]Проверено тип выходных тензорных данных и добавлена обработка как для FLOAT32, так и для INT32. [/list] Я ожидал, что вывод модели пройдет без проблем, поскольку я обработал оба FLOAT32. и случаи вывода INT32. Вопросы: [list] [*]Почему TensorFlow Lite выдает эту ошибку, даже если FLOAT32 используется для входной тензор? [*]Связана ли ошибка с тем, как TensorFlow Lite внутренне управляет типами данных, такими как измерения тензора или метаданные? [*]Как я могу устранить эту ошибку и убедитесь, что TensorFlow Lite выполняет вывод успешно? [/list]