如何将TensorFlow 2训练的SavedModel转换为冻结推理图?
将TensorFlow 2 SavedModel转换为冻结推理图
在TensorFlow 2中,由于默认采用Eager Execution模式,转换冻结推理图需要借助兼容工具或特定API完成,以下是两种可靠的实现方案:
方案一:Python代码转换(推荐)
这种方式灵活性高,能精准控制转换过程:
导入依赖库并加载SavedModel
import tensorflow as tf from tensorflow.python.framework.convert_to_constants import convert_variables_to_constants_v2 # 替换为你的SavedModel存储路径 saved_model_path = "/path/to/your/saved_model" # 加载模型并获取推理签名 loaded_model = tf.saved_model.load(saved_model_path) inference_func = loaded_model.signatures["serving_default"]将推理函数转换为冻结图
# 获取函数的 ConcreteFunction 实例 concrete_func = inference_func.get_concrete_function() # 将变量转换为常量,生成冻结图 frozen_graph_func = convert_variables_to_constants_v2(concrete_func)保存冻结图文件
# 替换为你想要保存的路径和文件名 tf.io.write_graph( graph_or_graph_def=frozen_graph_func.graph, logdir="/path/to/save", name="frozen_inference_graph.pb", as_text=False )
方案二:命令行辅助转换
如果偏好命令行操作,可先通过tf.saved_model.cli确认SavedModel的签名信息,再结合上述代码完成转换:
# 查看SavedModel的签名详情 saved_model_cli show --dir /path/to/your/saved_model --all
确认签名后,替换代码中的serving_default为实际签名名称即可。
关键注意事项
- 确保SavedModel包含有效的推理签名(通常为
serving_default,由模型导出时自动生成)。 - 冻结图将所有可训练变量转换为常量,适合部署到仅支持静态图的推理环境。
- 若你的模型包含自定义层或操作,需确保这些操作在冻结过程中能被正确转换为常量。
内容的提问来源于stack exchange,提问作者Shalaw Mshir
相关产品推荐
相关产品推荐

