Tensorflow 如何调试计算节点的原因?

Tensorflow 如何调试计算节点的原因?,tensorflow,Tensorflow,在Tensorflow中,仅当目标依赖于占位符时,才必须输入占位符: x = tf.placeholder(tf.int32, [], "x") y = 2 * x1 y = tf.Print(y, ["Computed y"]) z = 2 * y # Error: should feed "x" z.eval() # OK, because y is not actually computed z.eval({y: 1}) 现在,在我更复杂的图表中,我有一个问题,我得到了一个错误,一些

在Tensorflow中,仅当目标依赖于占位符时,才必须输入占位符:

x = tf.placeholder(tf.int32, [], "x")
y = 2 * x1
y = tf.Print(y, ["Computed y"])
z = 2 * y

# Error: should feed "x"
z.eval()

# OK, because y is not actually computed
z.eval({y: 1})
现在,在我更复杂的图表中,我有一个问题,我得到了一个错误,一些占位符没有被输入,但我认为它们不应该被需要,通过与上面所示相同的机制

我如何调试这个?错误消息仅说明需要哪个占位符,而不说明原因。获取从占位符到目标的路径会很有帮助


如何获取这些信息?

如果图形不是很大,您可以从目标节点进行反向图形搜索

使用它

tf.reset_default_graph()
a1 = tf.ones(())
b1 = tf.ones(())
a2 = 2*a1
b2 = 2*b1
a3 = 2*a2
b3 = 2*b2
d4 = b3+a3
find(d4, a1)
应该回来

[<tf.Tensor 'add:0' shape=() dtype=float32>,
 <tf.Tensor 'mul_2:0' shape=() dtype=float32>,
 <tf.Tensor 'mul:0' shape=() dtype=float32>,
 <tf.Tensor 'ones:0' shape=() dtype=float32>]

如果图形不大,您可以从目标节点进行反向图形搜索

使用它

tf.reset_default_graph()
a1 = tf.ones(())
b1 = tf.ones(())
a2 = 2*a1
b2 = 2*b1
a3 = 2*a2
b3 = 2*b2
d4 = b3+a3
find(d4, a1)
应该回来

[<tf.Tensor 'add:0' shape=() dtype=float32>,
 <tf.Tensor 'mul_2:0' shape=() dtype=float32>,
 <tf.Tensor 'mul:0' shape=() dtype=float32>,
 <tf.Tensor 'ones:0' shape=() dtype=float32>]

很好,谢谢!如果TF将此信息放入错误消息中,那就好了。或者提供一个
AssertNotEvaluated
identity Op,如果路径被违反,它将输出路径。很好,谢谢!如果TF将此信息放入错误消息中,那就好了。或者提供一个
AssertNotEvaluated
identity Op,如果违反了该操作,则输出路径。