我想在运行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
没有创建新节点,因此忽略了控制依赖性。
我确信有更好的方法可以解决这个问题,有什么建议吗? : - )
答案 0 :(得分:4)
我不认为存在更优雅的解决方案,因为这是设计的行为。 tf.control_dependencies
是tf.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)
。