如何将Keras的.h5模型文件转换为TensorFlow的.meta等格式文件?
将Keras .h5模型转换为TensorFlow Checkpoint格式(含.meta等文件)
嘿,我来帮你搞定这个转换问题!其实把Keras保存的.h5模型转成TensorFlow的checkpoint格式(也就是你需要的.meta、checkpoint、.data和.index文件)并不复杂,下面是一步步的实操方法:
步骤1:加载Keras的.h5模型
首先我们需要把已保存的Keras模型加载到内存中,这里用TensorFlow整合后的Keras API即可:
import tensorflow as tf from tensorflow import keras # 加载你的.h5模型 model = keras.models.load_model('name.h5')
步骤2:保存为TensorFlow Checkpoint格式
因为你需要用tf.train.import_meta_graph来导入计算图,这里我们需要切换到TensorFlow 1.x的兼容模式(如果你用的是TF2.x版本),然后通过会话保存模型:
# 禁用 eager execution,切换到TF1.x兼容模式 tf.compat.v1.disable_eager_execution() # 获取当前Keras的会话 sess = tf.compat.v1.keras.backend.get_session() # 创建Saver对象,用于保存checkpoint saver = tf.compat.v1.train.Saver() # 保存模型到指定目录,这里会自动生成所需的四类文件 saver.save(sess, './tf_checkpoint/my_model')
执行完这段代码后,./tf_checkpoint/目录下就会出现你需要的四个文件:
my_model.meta:计算图结构文件my_model.data-00000-of-00001:模型权重数据my_model.index:权重索引文件checkpoint:记录最新checkpoint信息的文本文件
步骤3:验证导入计算图
接下来你就可以用tf.train.import_meta_graph来导入计算图了,示例代码如下:
import tensorflow as tf # 创建会话 sess = tf.compat.v1.Session() # 导入.meta文件中的计算图 saver = tf.compat.v1.train.import_meta_graph('./tf_checkpoint/my_model.meta') # 加载权重参数 saver.restore(sess, tf.compat.v1.train.latest_checkpoint('./tf_checkpoint/')) # 如果你需要获取图中的输入输出张量,可以先通过model.summary()查看层名称 graph = tf.compat.v1.get_default_graph() input_tensor = graph.get_tensor_by_name('your_input_layer_name:0') # 替换为实际输入层名称 output_tensor = graph.get_tensor_by_name('your_output_layer_name:0') # 替换为实际输出层名称
一些注意事项
- 尽量保证保存Keras模型时的TensorFlow版本和转换时的版本一致,避免出现兼容性问题。
- 如果你的模型是用纯TF2.x构建的,其实官方更推荐使用SavedModel格式,但如果你明确需要checkpoint格式,上面的方法完全适用。
- 可以通过运行
model.summary()来查看模型各层的名称,这样能准确找到你需要的张量名称。
内容的提问来源于stack exchange,提问作者Meysam Sadeghi
相关产品推荐
相关产品推荐

