【问题标题】:Placeholder_2:0 is both fed and fetchedPlaceholder_2:0 既被馈送又被获取
【发布时间】:2016-09-03 12:52:48
【问题描述】:

当我运行这段代码时:

x = tf.placeholder(tf.int32, shape=(None, 3))
with tf.Session() as sess: 
    feed_dict = dict()
    feed_dict[x] = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
    input = sess.run([x], feed_dict=feed_dict)

我得到这个错误:

Placeholder_2:0 is both fed and fetched.

我不确定我在这里做错了什么。为什么这不起作用?

【问题讨论】:

标签: machine-learning tensorflow


【解决方案1】:

您确定此代码涵盖了您要实现的目标吗? 你要求读出你通过的任何东西。这不是 tensorflow 中的有效调用。如果你想传递值并且什么都不做(为了什么?)你应该有一个身份操作。

x = tf.placeholder(tf.int32, shape=(None, 3))
y = tf.identity(x)

with tf.Session() as sess: 
    feed_dict = dict()
    feed_dict[x] = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
    input = sess.run([y], feed_dict=feed_dict)

问题是“馈送”实际上会覆盖您的操作生成,因此您此时无法获取它(因为该特定操作不再真正产生任何内容)。如果你添加这个身份操作,你正确地馈送(覆盖 x)对结果(身份)不做任何事情并获取它(身份产生什么,这是你作为 x 的输出馈送的任何东西)

【讨论】:

  • 是的。你是对的!我意识到我做错了什么并发布了一个答案,因为你也在发布这个答案。感谢您花时间发布您的答案。我现在明白了
  • 我试图在 sess.run() 内部运行 x,但没有什么可运行的
  • 附带一个问题,如果我们使用y = x 而不是y = tf.identity(x) 将更改y 更改x
  • y = x 什么都不做,这只是一个纯 python 代码,它将 x 的引用分配给变量 y,这对底层图形没有任何作用。因此答案是否定的,这是行不通的。是的,对 y 的任何更改也会影响 x(因为这是对同一对象的引用)。
  • 啊。这是有道理的
【解决方案2】:

我发现我做错了什么。

x 是一个占位符——它保存信息并且评估 x 不会做任何事情。我忘记了那条重要信息,然后尝试在 sess.run() 内部运行张量 x

如果有另一个张量 y 依赖于 x 并且我像 sess.run([y], feed_dict=feed_dict) 一样运行它,则类似的代码会起作用

【讨论】:

    猜你喜欢
    • 2021-01-30
    • 2011-09-08
    • 2022-09-26
    • 2018-03-19
    • 2020-09-12
    • 2019-03-01
    • 1970-01-01
    • 2016-09-01
    相关资源
    最近更新 更多