如何从saved_model.pb文件加载模型结构与权重?
加载SavedModel并获取可查看结构的模型对象
你用tf.saved_model.save保存的模型,通过tf.saved_model.load加载后得到的是SavedModel对象,它没有model.summary()方法,但可以通过以下几种方式获取支持结构查看的模型实例:
方法1:用Keras加载器直接恢复(推荐)
如果你的模型原本是Keras模型(比如tf.keras.Model子类或函数式模型),直接用tf.keras.models.load_model加载,就能得到完整的Keras模型对象,支持summary()、权重查看等操作:
import tensorflow as tf # 加载模型 keras_model = tf.keras.models.load_model(model_directory) # 查看模型结构 keras_model.summary() # 查看模型权重 print(keras_model.trainable_weights)
方法2:从SavedModel重建Keras模型
如果加载后的SavedModel没有直接的Keras接口,可以通过签名信息重建Keras模型:
import tensorflow as tf # 加载SavedModel loaded_savedmodel = tf.saved_model.load(model_directory) # 获取推理签名 infer_signature = loaded_savedmodel.signatures["serving_default"] # 提取输入特征(单输入场景,多输入可循环处理) input_tensor = infer_signature.inputs[0] input_shape = input_tensor.shape[1:] # 忽略batch维度 input_dtype = input_tensor.dtype # 构建输入层 inputs = tf.keras.Input(shape=input_shape, dtype=input_dtype) # 调用SavedModel得到输出 outputs = loaded_savedmodel(inputs) # 封装为Keras模型 rebuilt_model = tf.keras.Model(inputs=inputs, outputs=outputs) # 查看模型结构 rebuilt_model.summary()
方法3:利用加载对象的Keras属性
从你给出的dir(model_loaded)输出中可以看到keras_api属性,尝试直接提取Keras模型:
# 从加载的SavedModel对象中获取Keras模型 keras_model = loaded_savedmodel.keras_api.layer keras_model.summary()
说明
tf.saved_model.load加载的是通用的SavedModel格式对象,它包含模型的计算图、变量和签名,但并非Keras原生模型实例;而tf.keras.models.load_model会自动检测并恢复Keras模型的结构和权重,因此优先使用该方法。
内容的提问来源于stack exchange,提问作者zaowad
相关产品推荐
相关产品推荐

