tf.keras.models.load_model加载旧模型失败,求兼容解决方法
Keras 3加载旧版SavedModel模型的兼容解决方案
问题背景
通过tf.keras.models.save_model()保存的TensorFlow SavedModel格式模型,在Keras 3环境中使用tf.keras.models.load_model()加载时触发格式不兼容报错:
保存与加载代码:
# 模型保存代码 tf.keras.models.save_model(file_path) # 加载代码(触发报错) model_a = tf.keras.models.load_model(file_path)
报错信息:
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-12-120117fe47ab> in <cell line: 3>() 1 #@title Load the checkpoint 2 checkpoint_path = '/drive/MyDrive/dummy/2' # @param {type:"string"} ----> 3 model_a = tf.keras.models.load_model(checkpoint_path) 4 tf.keras.utils.plot_model(ad._model, show_shapes = True) /usr/local/lib/python3.10/dist-packages/keras/src/saving/saving_api.py in load_model(filepath, custom_objects, compile, safe_mode) 197 ) 198 else: --> 199 raise ValueError( 200 f"File format not supported: filepath={filepath}. " 201 "Keras 3 only supports V3 `.keras` files and " ValueError: File format not supported: filepath=/drive/MyDrive/dummy/2. Keras 3仅支持V3 `.keras`文件和旧版H5格式文件(`.h5`扩展名)。注意:Keras 3的`load_model()`不支持旧版SavedModel格式。若要在Keras 3中重新加载TensorFlow SavedModel作为仅推理层,请使用`keras.layers.TFSMLayer(/drive/MyDrive/dummy/2, call_endpoint='serving_default')`(注意你的`call_endpoint`名称可能不同)。
解决方案(无需重新训练模型)
方案1:加载为仅推理层(适用于仅预测场景)
如果只需要使用模型进行推理预测,直接使用Keras.layers.TFSMLayer加载模型:
from keras.layers import TFSMLayer # 加载SavedModel为推理层,call_endpoint需根据实际模型签名调整 inference_layer = TFSMLayer('/drive/MyDrive/dummy/2', call_endpoint='serving_default') # 推理使用示例 # input_data = ... # 符合模型输入格式的数据 # predictions = inference_layer(input_data)
确认正确的call_endpoint:
若不确定模型的签名名称,可通过以下代码查看:
import tensorflow as tf saved_model = tf.saved_model.load('/drive/MyDrive/dummy/2') print("可用签名名称:", list(saved_model.signatures.keys()))
方案2:转换为Keras 3支持的格式(保留完整模型功能)
如果需要模型的完整功能(如继续训练、修改网络结构),可通过TensorFlow 2.x(Keras 2)环境将旧模型转换为.keras或.h5格式:
- 在TensorFlow 2.x环境中执行转换:
import tensorflow as tf # 加载旧版SavedModel old_model = tf.keras.models.load_model('/drive/MyDrive/dummy/2') # 保存为Keras 3兼容的.keras格式(推荐) old_model.save('/drive/MyDrive/dummy/2_converted.keras') # 或保存为H5格式 # old_model.save('/drive/MyDrive/dummy/2_converted.h5')
- 回到Keras 3环境,加载转换后的模型:
model_a = tf.keras.models.load_model('/drive/MyDrive/dummy/2_converted.keras')
内容的提问来源于stack exchange,提问作者Bi Bi
相关产品推荐
相关产品推荐

