加载TensorFlow pb模型后调用summary()报错,如何查看模型结构
查看TensorFlow .pb格式SavedModel结构的解决方案
错误原因
tf.saved_model.load加载返回的是TensorFlow SavedModel格式的通用封装_UserObject,不是Keras的模型实例,因此不具备summary()方法,只有通过tf.keras接口导出的模型,用对应接口加载才能直接调用summary()。
可用排查方法
- 方法1:使用
saved_model_cli命令行工具快速查询
这是最便捷的查询方式,直接在终端执行以下命令即可输出模型的全量签名、输入输出结构、算子信息:
从输出信息即可判断任务类型:如果输出包含saved_model_cli show --dir 替换为你的模型目录路径 --alldetection_boxes/detection_scores/detection_classes等字段为目标检测任务;如果输出为和输入尺寸匹配的类别掩码,或存在segmentation_map/pred_mask等字段为分割任务。 - 方法2:通过Python API查询签名与计算图结构
用以下代码可以打印模型的输入输出定义、算子节点信息:import tensorflow as tf model_path = os.path.join(saved_path,"model",str(k+1)) model = tf.saved_model.load(model_path) # 查看模型可用的推理签名 print("可用签名:", model.signatures.keys()) # 取默认的serving推理签名 infer = model.signatures["serving_default"] # 打印输入输出的结构、形状、数据类型 print("输入结构:", infer.structured_input_signature) print("输出结构:", infer.structured_outputs) # 按需打印计算图的所有算子节点 for op in infer.graph.get_operations(): print(op.name, op.outputs) - 方法3:TensorBoard可视化完整计算图
如果需要更直观的查看全量结构,可以将计算图导出到TensorBoard中查看:
终端执行from tensorflow.python.summary.writer.writer import FileWriter # 前面已经拿到infer推理签名 with FileWriter("./tf_log", graph=infer.graph) as f: passtensorboard --logdir ./tf_log,打开对应本地地址即可在Graphs栏查看完整的计算图结构。 - 可选尝试:加载为Keras模型
如果该模型是通过Keras接口导出的,可直接用Keras的加载接口拿到带summary()方法的模型实例:keras_model = tf.keras.models.load_model(model_path) keras_model.summary()
内容的提问来源于stack exchange,提问作者Seung H
相关产品推荐
相关产品推荐

