利用tf.saved_model导出keras模型

keras一般保存为h5py格式的模型,当然也可以直接使用tf.saved_model保存为pb模型,那如果想将保存的h5py模型导出为pb模型该怎么办呢?以下代码就可以完成该项功能。

假设我们保存了keras的模型为model.json(结构)和weights.h5(权重),

首先读取keras模型:

# tensorflow == 1.13.1
import tensorflow as tf

def load_keras_model(model_path, weights_path):
    fr = open(model_path, "r")
    model_json = fr.read()
    fr.close()
    model = tf.keras.models.model_from_json(model_json, custom_objects={"tf":tf})
    model.load_weights(weights_path)
    return model

然后转换tensor name并导出模型:

model_export_dir = "./model/1"
model = load_keras_model("model.json", "weights.h5")
name_to_inputs = {i.name.split(":")[0]:i for i in model.inputs}
name_to_outputs = {i.name:i for i in model.outputs}
print(name_to_inputs)
print(name_to_outputs)
tf.saved_model.simple_save(tf.keras.backend.get_session(),
                           model_export_dir,
                           inputs=name_to_inputs,
                           outputs=name_to_outputs)

在model/1目录下导出的模型结构为:

saved_model.pb
variables |
          |variables.data-00000-of-00001
          |variables.index 

 

你可能感兴趣的:(tensorflow,keras,深度学习)