我们通过图形冻结将许多TF1模型部署:
tf.train.write_graph(self.session.graph_def, some_path)
# get graph definitions with weights
output_graph_def = tf.graph_util.convert_variables_to_constants(
self.session, # The session is used to retrieve the weights
self.session.graph.as_graph_def(), # The graph_def is used to retrieve the nodes
output_nodes, # The output node names are used to select the usefull nodes
)
# optimize graph
if optimize:
output_graph_def = optimize_for_inference_lib.optimize_for_inference(
output_graph_def, input_nodes, output_nodes, tf.float32.as_datatype_enum
)
with open(path, "wb") as f:
f.write(output_graph_def.SerializeToString())
然后通过以下方式加载它们:
with tf.Graph().as_default() as graph:
with graph.device("/" + args[name].processing_unit):
tf.import_graph_def(graph_def, name="")
for key, value in inputs.items():
self.input[key] = graph.get_tensor_by_name(value + ":0")
我们希望以类似的方式保存TF2模型。一个protobuf文件将包括图和权重。我该如何实现这一点?
我知道有一些保存方法:
- keras.experimental.export_saved_model(model, 'path_to_saved_model'),它是实验性的,并且创建多个文件 :( - model.save('path_to_my_model.h5'),它保存h5格式 :( - tf.saved_model.save(self.model, "test_x_model"),它再次保存多个文件 :(