2017-01-14 5 views
0

は、プレースホルダは、唯一の目標は、それに依存している場合に供給する必要があります。ノードの評価理由をデバッグするにはどうすればよいですか? 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}) 

さて、私のより複雑なグラフでは、私はいくつかのプレースホルダが供給されていないというエラーが出る問題がありますが、私上に示したのと同じ仕組みで、それらが必要ではないはずだと思います。

これをどのようにデバッグできますか?エラーメッセージには、必要なプレースホルダのみが示されますが、理由は示されません。プレースホルダからゴールへのパスを取得すると便利です。

この情報はどのように入手できますか?

答えて

2

グラフが巨大ではない場合、あなたは

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>] 
を返す必要があり、それを使用するには、ターゲット・ノードから

すなわち、

def find(start, target): 
    """Returns path to parent from given start node""" 
    if start == target: 
     return [target] 
    for parent in start.op.inputs: 
     found_path = find(parent, target) 
     if found_path: 
      return [start]+found_path 
    return [] 

を後方グラフ探索を単に行うことができます

Eグラフが大きく、あなたが感謝、それらの間

import tensorflow.contrib.graph_editor as ge 
ops_between = ge.get_walks_intersection_ops(source, target) 

ge.get_walks_intersection_ops doc

+0

ニースOPSへの検索を制限することによって、それをスピードアップすることができます! TFがこの情報をエラーメッセージに入れると良いでしょう。あるいは、侵害された場合にパスを出力する 'AssertNotEvaluated'アイデンティティOpを提供するかもしれません。 – Georg

関連する問題