无法使用tf.saved_model.load()加载TensorFlow Lite模型问题咨询
核心原因
你遇到的TypeError: '_UserObject' object is not callable报错,本质是tf.saved_model.load()仅支持加载TensorFlow原生SavedModel格式模型,完全不支持读取TFLite格式文件,读取TFLite时无法解析出标准的SavedModel调用接口,只会返回无调用能力的封装对象,调用时就会抛出该错误。无论怎么调整代码都不可能用这个接口完成TFLite模型加载,这是接口本身的能力限制,和你现有代码的写法无关。
另外你检索到的「用tf.keras.models.load_model()加载」的说法也是错误的,这个接口是用来加载Keras原生训练模型(.h5格式或Keras SavedModel格式),同样不支持直接加载TFLite模型。
正确处理方案
你不需要把所有TensorFlow代码都改成Keras格式,直接使用TFLite专属的运行接口即可,参考代码如下:
import tensorflow as tf # 加载TFLite模型文件 interpreter = tf.lite.Interpreter(model_path="your_model.tflite") # 预分配运行所需的张量内存 interpreter.allocate_tensors() # 获取模型输入输出的张量配置 input_config = interpreter.get_input_details() output_config = interpreter.get_output_details() # 输入数据需要和训练时的shape、dtype完全匹配 input_data = 待推理的输入数据 # 写入输入数据 interpreter.set_tensor(input_config[0]['index'], input_data) # 执行推理 interpreter.invoke() # 读取推理结果 result = interpreter.get_tensor(output_config[0]['index'])
如果你确实需要使用
tf.saved_model.load()加载模型 直接使用转TFLite之前的原始SavedModel格式文件加载即可,不需要修改现有逻辑。如果原始模型文件丢失,也可以将TFLite模型反向转换为SavedModel格式,但这个过程会存在精度损失,且不保证所有自定义算子都能兼容。
内容的提问来源于stack exchange,提问作者Hoang97
相关产品推荐
相关产品推荐

