tf.group和tf.control_dependencies有什么区别?

时间:2017-01-21 14:44:13

标签: tensorflow

除了tf.control_dependencies是一个上下文管理器(即与Python with一起使用)之外,tf.grouptf.control_dependencies之间的区别是什么?

什么时候应该使用?

tf.group是否没有任何特定的操作顺序?我假设tf.group([op_1, op_2, op_3])按照列表的顺序执行操作,但可能不是这样吗?文档字符串没有指定行为。

2 个答案:

答案 0 :(得分:16)

如果查看graphdef,c=tf.group(a, b)将生成与

相同的图形
with tf.control_dependencies([a, b]):
    c = tf.no_op() 

没有特定的操作顺序,TensorFlow会尽快(即并行)尝试执行操作。

答案 1 :(得分:0)

只需在@ Yaroslav-Bulatov回答中添加一些小问题。

从Yaroslav的答案中可以看出,主要区别在于tf.control_depenencies不向计算图添加操作(节点),而tf.group创建并返回新的操作(节点)。

此外,如果inputs属于多个设备,tf.group将在其返回的节点和inputs之间插入一个中间层。该层将包含每个设备一个节点,以便依赖关系由设备组织。这减少了跨设备数据流。

因此,如果您的依赖项位于多个设备上,tf.group会添加一些优化。

另一方面,tf.control_dependencies具有嵌套的良好行为。内部上下文将依赖于外部上下文中所有操作的并集。