Tensorflow 如何在python中加载tf.saved_模型后获取输入和输出张量

Tensorflow 如何在python中加载tf.saved_模型后获取输入和输出张量,tensorflow,tensorflow-serving,Tensorflow,Tensorflow Serving,假设我用以下代码保存了一个模型 tf.saved_model.simple_save(sess,export_dir,in={'input_x':x,'input_y':y},out={'output_z':z}) 现在我在另一个python程序中加载保存的模型 使用tf.Session()作为sess: tf.saved_model.loader.load(sess,['service'],export_dir) 现在的问题是,当调用simple_save()方法时,如何通过我在inp

假设我用以下代码保存了一个模型

tf.saved_model.simple_save(sess,export_dir,in={'input_x':x,'input_y':y},out={'output_z':z})

现在我在另一个python程序中加载保存的模型

使用tf.Session()作为sess:
tf.saved_model.loader.load(sess,['service'],export_dir)

现在的问题是,当调用simple_save()方法时,如何通过我在input/output参数中指定的“input_x”、“input_y”、“output_z”键获取x、y、z张量的句柄


我在网上找到的唯一解决方案依赖于在创建x、y、z张量时显式命名它们,然后使用这些名称从图形中检索它们,这似乎是非常冗余的,因为我们在调用simple_save()时为它们指定了键.

tf.saved_model.loader.load的返回值是一个
MetaGraphDef
协议缓冲区,它应该具有保存模型时设置的所有签名;这些应该包含您想要的名称。

我完全了解您的问题,经过一些调查(我认为糟糕的TF文档),我找到了下一个解决方案:

使用返回的MetaGraphDef对象查找输入\输出名称映射

        graph = tf.Graph()
    with graph.as_default():
        metagraph = tf.saved_model.loader.load(sess, [tag_constants.SERVING],save_path)

    inputs_mapping = dict(metagraph.signature_def['serving_default'].inputs)
    outputs_mapping = dict(metagraph.signature_def['serving_default'].outputs)
此代码将为您提供保存到“TensorInfo”对象时所提供名称之间的映射,您可以从他那里轻松获得映射的张量名称,例如:

    my_input = inputs_mapping['my_input_name'].name
    my_input_t = graph.get_tensor_by_name(my_input)

谢谢,但我不确定你的回答是否回答了我的问题。我在问如何通过我在签名中输入的键抓住张量的手柄。也许如果你能写一些代码,它会更清晰。