Python 为什么这个TensorFlow片段在馈送时抛出错误? 代码 抛出错误 InvalidArgumentError:必须使用dtype float[{{node placeholder_5}}}=placeholder[dtype=DT_float,shape=,_device=“/job:localhost/replica:0/任务:0/设备:CPU:0”]()]为占位符张量“placeholder_5”提供一个值

Python 为什么这个TensorFlow片段在馈送时抛出错误? 代码 抛出错误 InvalidArgumentError:必须使用dtype float[{{node placeholder_5}}}=placeholder[dtype=DT_float,shape=,_device=“/job:localhost/replica:0/任务:0/设备:CPU:0”]()]为占位符张量“placeholder_5”提供一个值,python,numpy,tensorflow,Python,Numpy,Tensorflow,在上述代码段中的sess.run(init)行抛出错误。我正在通过feed_dict馈送浮点型数组,我不确定抛出错误的原因 错误在哪里,原因何在?为什么出现错误: 因为您在一个不干净的图中多次运行同一个代码段(即,您的图有多个网络副本)。 我之所以这样说,是因为错误消息中节点名称末尾的\u 5。TF使用增量索引为图中的所有张量指定一个默认名称,以防已使用名称占位符_5表示在同一个图形中,至少有5个占位符实例没有指定自定义默认名称,根据您的代码,除非在不清理图形的情况下多次调用函数,否则不可能指定

在上述代码段中的
sess.run(init)
行抛出错误。我正在通过feed_dict馈送浮点型数组,我不确定抛出错误的原因

错误在哪里,原因何在?

为什么出现错误: 因为您在一个不干净的图中多次运行同一个代码段(即,您的图有多个网络副本)。 我之所以这样说,是因为错误消息中节点名称末尾的
\u 5
。TF使用增量索引为图中的所有张量指定一个默认名称,以防已使用名称<代码>占位符_5表示在同一个图形中,至少有5个
占位符
实例没有指定自定义默认名称,根据您的代码,除非在不清理图形的情况下多次调用函数,否则不可能指定自定义默认名称

如何修复它: 在干净的图形中运行:将
tf.reset\u default\u graph()
放在
finalVal=customOps(n)
之前

注意:您的代码有更多的问题(例如,您在主分支中有
x
,但是
x
customOps
的局部变量),但是您的错误原因是上面提到的。 在下面,您可以找到解决这两个问题的代码的测试和工作版本

InvalidArgumentError: You must feed a value for placeholder tensor 'Placeholder_5' with dtype float [[{{node Placeholder_5}} = Placeholder[dtype=DT_FLOAT, shape=<unknown>, _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]

它抛出
ValueError:名称“x”看起来像一个(无效)操作名称,而不是张量。张量名称的格式必须为“:”
在这种情况下如何馈送?我曾尝试声明
global x
,但这没有帮助。为了测试您的代码,我只是将
customOps
更改为
return x,finalVal
,然后将其命名为
x,finalVal=customOps(n)
,但这样做仍然会引发相同的错误。为什么会这样?请参见更新答案中的代码。这就是我测试我的解决方案的方式,它不会给我任何错误
InvalidArgumentError: You must feed a value for placeholder tensor 'Placeholder_5' with dtype float [[{{node Placeholder_5}} = Placeholder[dtype=DT_FLOAT, shape=<unknown>, _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]
import tensorflow as tf
import numpy as np

def customOps(n):
  x = tf.placeholder(tf.float32)
  v1 = tf.reduce_sum(x,1)
  v2 = tf.reduce_sum(x,0)
  v = tf.nn.softmax(tf.concat([v1, v2], 0))
  index = np.argmax(v)
  if index > n/3:
    finalval = tf.norm(v1-v2, ord='euclidean')
  else:
    finalval = tf.norm(v1+v2, ord='euclidean')
  return x, finalval

if __name__ == '__main__':
  mat = np.asarray([[0, 1], [1, 0]], dtype = np.float32)
  n = mat.shape[0]

  tf.reset_default_graph()
  x, finalVal = customOps(n)

  init = tf.global_variables_initializer()
  sess = tf.Session()
  sess.run(init)
  outVal = sess.run(finalVal, feed_dict={x:mat})
  print(outVal)
  sess.close()