未能应用委托:TfLiteGpuDelegate Init:MUL:预期形状为 HxWxC 的 3D 张量或形状为 1xHxWxC 的 4D 张量但得到 98x8(Android)

Failed to apply delegate: TfLiteGpuDelegate Init: MUL: Expected a 3D tensor of shape HxWxC or a 4D tensor of shape 1xHxWxC but got 98x8 (Android)

我将 tensorflow-lite 和 tensorflow-lite-gpu 从 2.3.0 升级到 2.4.0 并在初始化 interpeteur

时出现此错误

java.lang.IllegalArgumentException:内部错误:无法应用委托:TfLiteGpuDelegate Init:MUL:预期形状为 HxWxC 的 3D 张量或形状为 1xHxWxC 的 4D 张量但得到 98x8 TfLiteGpuDelegate 准备:委托未初始化节点号329 (TfLiteGpuDelegateV2) 准备失败。

val tfliteOptions = Interpreter
.Options()
.setNumThreads(THREADS_COUNT)
.addDelegate(GpuDelegate())

Interpreter(loadModelFile(context), tfliteOptions)

问题出在tensorflow-lite-gpu 2.4.0

如果我在旧版本中使用这样的配置,一切正常

implementation("org.tensorflow:tensorflow-lite:2.4.0")
implementation("org.tensorflow:tensorflow-lite-gpu:2.3.0")

2.4.0、2.5.0、2.6.0、2.7.0、2.8.0 Gpu 委托不工作

问题 GitHub https://github.com/tensorflow/tensorflow/issues/45845

示例android项目如何重现 https://github.com/OleksandrGrument/GpuDelegateBugReproduce

Tflite 模型 https://github.com/OleksandrGrument/GpuDelegateBugReproduce/blob/master/app/src/main/assets/model.tflite

我已经在 github 上打开了一个线程但是 2 年没有结果,也许有人知道如何通过某种方式更改 tflite 文件来绕过这个错误

我找到了解决此问题的方法,在转换为 tflite 之前我进行了更改

tf.math.multiply(weights, var)

tf.linalg.matmul(weights, var, transpose_a=True)

从版本 2.4.0 开始,Gpu Delegate 似乎无法继续执行此操作以将二维数组与 tf.math.multiply 相乘。