系统信息
我是否编写了自定义代码(与使用TensorFlow中提供的股票示例脚本相对):是 操作系统平台和发行版(例如Linux Ubuntu 16.04):Mac OS Mojave 如果问题发生在行动装置上,则行动装置(例如iPhone 8,Pixel 2,三星Galaxy):不适用 从(源或二进制)安装的TensorFlow:二进制 TensorFlow版本(使用下面的命令):1.12 Python版本:3.6.4 Bazel版本(如果从源代码编译):N / A GCC /编译器版本(如果从源代码编译):N / A CUDA / cuDNN版本:N / A GPU型号和内存: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)
描述预期的行为 预期的行为是,根据占位符op,字节缓冲区将在幕后转换为float32的张量。
答案 0 :(得分:0)
您需要传递分配的ByteBuffer
句柄,而不是返回的asFloatBuffer()
句柄。该错误消息会引起误解,主要问题是API支持ByteBuffer
类型,但尚不支持或不了解FloatBuffer
类型。该错误消息将在下一个每晚构建中更清晰地显示(另请参见this fix),我们正在努力添加本机FloatBuffer支持。