【问题标题】:Exported Tensorflow Model not Preserving Placeholder Shape导出的 TensorFlow 模型不保留占位符形状
【发布时间】:2016-11-22 04:24:24
【问题描述】:

我正在使用来自tensorflow.contrib.session_bundleexporter 来保存我的模型:

x = tf.placeholder(tf.float32, (None,) + (100, 200) + (1,))
....
saver = tf_saver.Saver(sharded=True)
model_exporter = exporter.Exporter(saver)
model_exporter.init(
    sess.graph.as_graph_def(),
    named_graph_signatures={
        'inputs': exporter.generic_signature({'images': x}),
        'outputs': exporter.generic_signature({'classes': y})})

然后我重新加载模型(session_bundle from tensorflow.contrib.session_bundle):

sess, meta_graph_def = session_bundle.load_session_bundle_from_path(input)

但是,当我检查与输入 x 对应的占位符张量时,我看不到任何形状信息:

> sess.graph.get_tensor_by_name(input_name)
<tf.Tensor 'Placeholder:0' shape=<unknown> dtype=float32>

这是设计使然还是有一些错误导致形状丢失?

【问题讨论】:

    标签: tensorflow tensorflow-serving


    【解决方案1】:

    这是一位同事的回答:

    exporter.generic_signature 调用(在构建 named_graph_signatures 时)会填充此处定义的 generic_signature 的映射:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/session_bundle/manifest.proto#L69

    映射中的值是TensorBinding,它本身就是张量名称。见https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/session_bundle/manifest.proto#L20

    所以预计不会保留形状,名称应该足以识别张量。”

    【讨论】:

    • 对,但我正在使用张量名称,我是 reading out of the protobuf,然后调用 get_tensor_by_name,它确实将名称解析为实际的张量对象。
    • 嗨,Alex,似乎只要可以使用名称检索张量信息,这应该可以。您能否详细说明具体问题可能是什么?
    • 我仍然不明白为什么输出张量的形状被输入张量的形状保留了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-02
    • 1970-01-01
    相关资源
    最近更新 更多