Tensorflow2.x - Keras 导出pb模型和saved_model.pb模型

本文介绍了在TensorFlow 2.x的Keras环境中,如何导出不包含variables和assets的pb模型,以及如何导出saved_model.pb模型。详细流程包括指定模型存储路径、模型转换操作以及源码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在TensorFlow 2.x的Keras中,导出pb模型的逻辑,不包含variables和assets的pb模型,与1.0版本有所不同。还有导出saved_model.pb模型。

导出PB模型

流程如下:

  • 指定模型的存储路径和名称。
  • 替换model为想要导出的模型,需要加载参数之后。
  • 模型转换操作。
  • 输出pb模型和pbtxt模型。

源码如下:

import tensorflow as tf
from tensorflow import keras
from tensorflow.python.framework.convert_to_constants import convert_variables_to_constants_v2
import numpy as np

# path of the directory where you want to save your model
frozen_out_path = ''  # 存储模型的路径
# name of the .pb file
frozen_graph_filename = "frozen_graph"  # 模型名称

model = # Your model Keras的model,加载模型之后的

# Convert Keras model to ConcreteFunction
full_model = tf.function(lambda x: model(x))
full_model = full_model.get_concrete_function(
    tf.TensorSpec(model.inputs[0].shape, model.inputs[0].dtype))
    
# Get frozen ConcreteFunction
frozen_func = convert_variables_to_constants_v2(full_model)
frozen_func.graph.as_graph_def()

layers = [op.name for op in frozen_func.graph.get_operations()]
要将训练好的 TensorFlow 模型保存为 .pb 文件,您可以按照以下步骤进行操作: 1. 定义模型结构:在保存模型之前,您需要定义模型的结构,包括输入输出节点的名称、形状数据类型。您可以使用 TensorFlow 的高级 API(如 Keras)或自定义模型来定义模型结构。 2. 加载模型权重:将训练好的模型权重加载到定义的模型结构中。这可以通过加载已保存的模型权重文件(如 .h5、.ckpt 等)或通过重新训练模型来实现。 3. 创建 SavedModel:使用 TensorFlow 的 `tf.saved_model.save` 函数将模型保存为 SavedModel 格式。SavedModelTensorFlow 的一种标准模型保存格式,可以包含模型的计算图变量值。 ```python import tensorflow as tf # 定义加载模型权重 model = ... # 定义模型结构 model.load_weights('model_weights.h5') # 加载模型权重 # 保存为 SavedModel 格式 tf.saved_model.save(model, 'saved_model') ``` 这将会在指定路径下创建一个名为 `saved_model` 的文件夹,其中包含了模型的计算图变量值。 4. 导出.pb 文件:从 SavedModel导出所需的 .pb 文件。可以使用 TensorFlow 的 `tf.compat.v1.graph_util.convert_variables_to_constants` 函数将 SavedModel 的计算图变量值转换为常量,并保存为 .pb 文件。 ```python from tensorflow.python.framework import graph_util # 加载 SavedModel saved_model_dir = 'saved_model' saved_model = tf.saved_model.load(saved_model_dir) # 将 SavedModel 转换为 .pb 文件 output_pb_file = 'model.pb' graph_def = graph_util.convert_variables_to_constants( saved_model.sess, saved_model.sess.graph_def, ['output_node_name']) with tf.io.gfile.GFile(output_pb_file, 'wb') as f: f.write(graph_def.SerializeToString()) ``` 将上述代码中的 `'output_node_name'` 替换为模型输出节点的名称。 现在,您应该已经成功将训练好的 TensorFlow 模型保存为 .pb 文件。请注意,这只是一个基本示例,具体的实现细节可能因您的模型结构需求而有所不同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ManonLegrand

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值