You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android端TensorFlow Lite 2.17版本FULLY_CONNECTED算子兼容问题

Android TensorFlow Lite加载模型报错:FULLY_CONNECTED算子版本不兼容

错误提示

Internal error: Cannot create interpreter: Didn't find op for builtin opcode 'FULLY_CONNECTED' version '12'. An older version of this builtin might be supported. Are you using an old TFLite binary with a newer model?

相关代码

模型加载实现

@Throws(IOException::class)
fun loadModelFile(
    context: Context,
    modelFileName: String = "constant_output_model.tflite"
): MappedByteBuffer {
    val fileDescriptor = context.assets.openFd(modelFileName)
    val inputStream = FileInputStream(fileDescriptor.fileDescriptor)
    val fileChannel = inputStream.channel
    val startOffset = fileDescriptor.startOffset
    val declareLength = fileDescriptor.declaredLength
    return fileChannel.map(FileChannel.MapMode.READ_ONLY, startOffset, declareLength)
}

解释器初始化代码

InterpreterApi.create(
    TfLiteUtils.loadModelFile(this, "voice_detection_2_17_0_new_ops.tflite"),
    InterpreterApi.Options().apply {
        numThreads = 1
    }
)

模型结构(移除Flatten层可正常运行)

input_shape = (None, 39, 63, 1)  # 输入形状(不含批次维度)
inputs = tf.keras.Input(shape=input_shape[1:])
x = tf.keras.layers.Conv2D(filters=128, kernel_size=(8, 8), activation='relu', padding='same')(inputs)
x = tf.keras.layers.AveragePooling2D(pool_size=(2, 2))(x)
x = tf.keras.layers.Conv2D(filters=64, kernel_size=(3, 3), activation='relu', padding='same')(x)
x = tf.keras.layers.AveragePooling2D(pool_size=(2, 2))(x)
x = tf.keras.layers.Conv2D(filters=128, kernel_size=(3, 3), activation='relu', padding='same')(x)
x = tf.keras.layers.MaxPooling2D(pool_size=(2, 2))(x)
x = tf.keras.layers.Flatten()(x) # *移除这一行模型即可正常运行*
x = tf.keras.layers.Dense(units=256)(x)
x = tf.keras.layers.LeakyReLU(alpha=0.1)(x)
x = tf.keras.layers.Dense(units=2, activation='softmax')(x)
outputs = tf.keras.layers.Dense(units=1)(x)
model = tf.keras.Model(inputs=inputs, outputs=outputs)
return model

环境说明

  • 使用自行构建的TensorFlow 2.17版本AAR包(Maven暂未提供该版本),尝试com.google.ai.edge.litert:litert:1.0.1时出现相同错误
  • 切换至TensorFlow 2.16版本,使用Interpreter API可正常加载运行模型

解决方法

  • 降级模型转换版本:使用TensorFlow 2.16重新转换Keras模型为TFLite格式,确保模型使用的算子版本与Android端依赖的TFLite库兼容。TensorFlow 2.17默认生成的模型可能使用了更高版本的FULLY_CONNECTED算子,而当前依赖的库尚未支持该版本。
  • 替换Flatten层:用Reshape层替代Flatten层,手动指定展平后的形状,避免触发高版本算子。示例代码:
    # 替换x = tf.keras.layers.Flatten()(x)
    x = tf.keras.layers.Reshape((-1,))(x)
    
  • 检查TFLite库构建参数:若坚持使用TensorFlow 2.17,需确认自行构建的AAR包是否包含了版本12的FULLY_CONNECTED算子实现,构建时需开启对应算子的编译选项。

内容的提问来源于stack exchange,提问作者Rohan Choudhary

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 02:57:15