#!/usr/bin/env python3
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 finalval
if __name__ == '__main__':
mat = np.asarray([[0, 1], [1, 0]], dtype = np.float32)
n = mat.shape[0]
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()
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"]()]]
上述代码段的sess.run(init)
行中引发了错误。我正在通过feed_dict提供一个float类型的数组,但不确定为什么会引发错误。
错误在哪里,为什么?
答案 0 :(得分:2)
因为您在一个不干净的图中多次运行了相同的代码段(即您的图具有网络的多个副本)。
我可以说的原因是错误消息中节点名称末尾的_5
。如果已经使用名称,则TF使用增量索引为图形中的所有张量分配默认名称。 Placeholder_5
表示在同一图中至少有5个Placeholder
实例未分配自定义默认名称,根据您的代码,除非您调用函数multi次数而不清理图表。
以干净的图形运行:将tf.reset_default_graph()
放在finalVal = customOps(n)
之前。
注意:您的代码存在的问题更多(例如,您在主分支中有x
,但是x
是{{1}的局部变量) }),但是导致错误的原因是上述原因。
在下面,您可以找到可以解决这两个问题的经过测试的有效版本。
customOps