除了tf.control_dependencies
是一个上下文管理器(即与Python with
一起使用)之外,tf.group
和tf.control_dependencies
之间的区别是什么?
什么时候应该使用?
tf.group
是否没有任何特定的操作顺序?我假设tf.group([op_1, op_2, op_3])
按照列表的顺序执行操作,但可能不是这样吗?文档字符串没有指定行为。
答案 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
具有嵌套的良好行为。内部上下文将依赖于外部上下文中所有操作的并集。