关于SavedModel用途及Keras格式重载的技术求助
关于SavedModel加载为Keras模型的解决方案
SavedModel是TensorFlow的通用模型格式,完全支持以Keras格式重新加载,并非仅适用于前端应用。针对你遇到的加载后无法使用、tf.keras.models.load_model报错的问题,可按以下步骤排查解决:
一、错误原因及对应解决方法
1. 模型并非由Keras API直接构建
如果你的模型是通过TensorFlow低级API(而非tf.keras.Model子类或Sequential)构建,直接用tf.keras.models.load_model会报错。可通过以下步骤转换为Keras模型:
import tensorflow as tf # 加载SavedModel对象 saved_model = tf.saved_model.load("你的模型目录路径") # 获取默认推理签名 infer_signature = saved_model.signatures["serving_default"] # 基于签名的输入输出构建Keras模型 keras_model = tf.keras.Model(inputs=infer_signature.inputs, outputs=infer_signature.outputs)
转换完成后,即可正常使用keras_model.predict()、继续训练(若模型保留了训练相关参数)。
2. 路径或模型文件问题
- 确认传入
tf.keras.models.load_model的是SavedModel的根目录(目录下需包含variables文件夹和saved_model.pb文件),而非单个文件。 - 检查模型文件是否损坏:如果SavedModel目录结构不完整,需确认原保存过程无异常,若有备份可尝试恢复。
3. TensorFlow版本不兼容
保存模型的TensorFlow版本与当前加载版本差异过大(比如用TF 1.x保存、TF 2.x加载)会导致兼容性问题。建议使用与保存时相同或次新版本的TensorFlow进行加载。
二、验证加载后的模型
加载/转换完成后,可通过以下方式验证模型可用性:
- 打印模型结构:
print(keras_model.summary()) - 用测试输入验证推理:
# 假设模型输入形状为(None, 224, 224, 3) test_input = tf.random.normal((1, 224, 224, 3)) predict_result = keras_model.predict(test_input) print(predict_result)
内容的提问来源于stack exchange,提问作者redflag
相关产品推荐
相关产品推荐

