【问题标题】:Tensorflow: feed_dict placeholder is Operation not TensorTensorflow:feed_dict 占位符是操作而不是张量
【发布时间】:2018-06-12 19:52:21
【问题描述】:

我在 python 类中创建了一个图表。初始化程序使我能够创建新图或加载现有图。

如果我通过创建来初始化,我会创建一个输入占位符:

self.input = tf.placeholder("float", [None, self.input_size], name="x"

然后我可以保存我的图表:

tf.saved_model.simple_save(
        self.sess, path, inputs={"x": self.input}, outputs={"encoded": self.encoded   

如果我从加载中初始化,我首先加载图表

tf.saved_model.loader.load(
        self.sess, [tf.saved_model.tag_constants.SERVING], path
    )

然后在类中设置我的输入输出名称

self.input = self.sess.graph.get_operation_by_name("x")
self.encoded = self.sess.graph.get_operation_by_name("encoded")

但是,当我尝试使用加载的图表时,出现错误:

def encode(self, X):
    return self.sess.run(self.encoded, 
                         feed_dict={self.input: X})


==> TypeError: Cannot interpret feed_dict key as Tensor: Can not convert a Operation into a Tensor.

我的 feed_dict self.input 被解释为一个操作,而不是一个张量。请注意,我无法将“x”加载为张量 - 如果我尝试 self.input = self.sess.graph.get_tensor_by_name("x"),我会收到错误,报告“x”是操作的名称,而不是张量。

但是,如果我检查 self.input,它会被报告为占位符:

name: "x"
op: "Placeholder"
attr {
  key: "dtype"
  value {
    type: DT_FLOAT
  }
}
attr {
  key: "shape"
  value {
    shape {
      dim {
        size: -1
      }
      dim {
        size: 81
      }
    }
  }
}

我做错了什么?

【问题讨论】:

    标签: python tensorflow


    【解决方案1】:

    您正在指定一个完整的操作,但由于操作可以有多个输出,您必须准确说明您想要哪个输出。试试这个:

    def encode(self, X):
        return self.sess.run(self.encoded, 
                             feed_dict={self.input.outputs[0]: X})
    

    或者,您可以这样做:

    self.input = self.sess.graph.get_tensor_by_name("x:0")
    

    【讨论】:

      猜你喜欢
      • 2019-02-27
      • 2017-12-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-28
      • 1970-01-01
      • 2015-09-19
      • 2020-02-10
      • 1970-01-01
      相关资源
      最近更新 更多