如何向Tensorflow op添加控制依赖项

时间:2017-10-18 15:17:58

标签: python machine-learning tensorflow deep-learning

我想在运行update_op之前运行summary。有时我只是创建一个tf.summary,一切正常,但有时我想做更多花哨的东西,但仍然有相同的控制依赖。

不起作用的代码:

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

糟糕的黑客行为

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

问题是summary=summary没有创建新节点,因此忽略了控制依赖性。

我确信有更好的方法可以解决这个问题,有什么建议吗? : - )

1 个答案:

答案 0 :(得分:4)

我不认为存在更优雅的解决方案,因为这是设计的行为。 tf.control_dependenciestf.Graph.control_dependencies使用默认图表调用的快捷方式,这里是其文档中的引用:

  

N.B。控制依赖关系上下文仅适用于操作   在上下文中构建。仅仅使用操作或张量   上下文不添加控件依赖项。以下示例   说明了这一点:

# 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)