2017-10-18 10 views
2

summaryを実行する前にupdate_opを実行します。時々私はただtf.summaryを作成し、すべてうまく動作しますが、時にはもっと魅力的なことをしたいのですが、依然として同じコントロールの依存関係があります。動作しませんTensorflowにコントロールの依存関係を追加する方法

コード:

with tf.control_dependencies([update_op]): 
    if condition: 
     tf.summary.scalar('summary', summary) 
    else: 
     summary += 0 

問題を作品

with tf.control_dependencies([update_op]): 
    if condition: 
     tf.summary.scalar('summary', summary) 
    else: 
     summary = summary 

悪いハックは、制御依存性が無視されるようにsummary=summaryは、新しいノードを作成していないということです。


私は確かにこれについて、どのような提案に行く良い方法がありますか? :-)

+0

'tf.identity(summary)'は機能しますか? –

+0

'summary = tf.identity(summary)'を使うと動作しますが、現在の実装と非常に似ています。私はさらに良いソリューションを望んでいたが、それは私が持っている最高です:) –

答えて

3

これは設計された動作であるため、私はこのより洗練された解決策は存在しないと思います。 tf.control_dependenciesは、デフォルトのグラフを使用してtf.Graph.control_dependenciesコールの近道であり、ここではそのドキュメントからの引用です:

N.B.は、コントロールの依存関係のコンテキストは、コンテキスト内で構築された のopsにのみ適用されます。文脈内でopまたはテンソルを使用するだけでは、コントロールの依存関係は追加されません。次の例 は、この点を示しています

# WRONG 
def my_func(pred, tensor): 
    t = tf.matmul(tensor, tensor) 
    with tf.control_dependencies([pred]): 
    # The matmul op is created outside the context, so no control 
    # dependency will be added. 
    return t 

# RIGHT 
def my_func(pred, tensor): 
    with tf.control_dependencies([pred]): 
    # The matmul op is created in the context, so a control dependency 
    # will be added. 
    return tf.matmul(tensor, tensor) 

コメントで示唆したように、単に、tf.identity(summary)を使用しています。

関連する問題