TensorFlow笔记——(1)理解tf.control_dependencies与control_flow_ops.with_dependencies

标签: tf.control_dependencies with_dependencies TensorFlow
19人阅读 评论(0) 收藏 举报
分类:

引言

我们在实现神经网络的时候经常会看到tf.control_dependencies的使用,但是这个函数究竟是什么作用,我们应该在什么情况下使用呢?今天我们就来一探究竟。

理解

其实从字面上看,control_dependencies 是控制依赖的意思,我们可以大致推测出来,这个函数应该使用来控制就算图节点之间的依赖的。其实正是如此,tf.control_dependencies()是用来控制计算流图的,给图中的某些节点指定计算的顺序。

原型分析

tf.control_dependencies(self, control_inputs)
 arguments:control_inputs: A list of `Operation` or `Tensor` objects 
which must be executed or computed before running the operations 
defined in the context. (注意这里control_inputs是listreturn:  A context manager that specifies control dependencies 
for all operations constructed within the context.

通过以上的解释,我们可以知道,该函数接受的参数control_inputs,是Operation或者Tensor构成的list。返回的是一个上下文管理器,该上下文管理器用来控制在该上下文中的操作的依赖。也就是说,上下文管理器下定义的操作是依赖control_inputs中的操作的,control_dependencies用来控制control_inputs中操作执行后,才执行上下文管理器中定义的操作。

例子1

如果我们想要确保获取更新后的参数,name我们可以这样组织我们的代码。

opt = tf.train.Optimizer().minize(loss)

with tf.control_dependencies([opt]): #先执行opt
  updated_weight = tf.identity(weight)  #再执行该操作

with tf.Session() as sess:
  tf.global_variables_initializer().run()
  sess.run(updated_weight, feed_dict={...}) # 这样每次得到的都是更新后的weight

可以看到以上的例子用到了tf.identity(),至于为什么要使用tf.identity(),我在下一篇博客:名字中有详细的解释,不懂的可以移步了解。

control_flow_ops.with_dependencies

除了常用tf.control_dependencies()我们还会看到,control_flow_ops.with_dependencies(),其实连个函数都可以实现依赖的控制,只是实现的方式不太一样。

with_dependencies(dependencies, output_tensor, name=None)
Produces the content of `output_tensor` only after `dependencies`.
所有的依赖操作完成后,计算output_tensor并返回
  In some cases, a user may want the output of an operation to be
  consumed externally only after some other dependencies have run
  first. This function ensures returns `output_tensor`, but only after all
  operations in `dependencies` have run. Note that this means that there is
  no guarantee that `output_tensor` will be evaluated after any `dependencies`
  have run.

  See also @{tf.tuple$tuple} and @{tf.group$group}.

  Args:
    dependencies: Iterable of operations to run before this op finishes.
    output_tensor: A `Tensor` or `IndexedSlices` that will be returned.
    name: (Optional) A name for this operation.

  Returns:
    Same as `output_tensor`.

  Raises:
    TypeError: if `output_tensor` is not a `Tensor` or `IndexedSlices`. 

例子2

update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS) #从一个集合中取出变量,返回的是一个列表
......
total_loss, clones_gradients = model_deploy.optimize_clones(
            clones,
            optimizer,
            var_list=variables_to_train)
......
# tf.group()将多个tensor或者op合在一起,然后进行run,返回的是一个op
update_op = tf.group(*update_ops)
train_tensor = control_flow_ops.with_dependencies([update_op], total_loss,
                                                          name='train_op')

可以看到以上的例子用到了tf.group(),至于为什么要使用tf.identity(),我在下一篇博客:TensorFlow笔记——(2) tf.group(), tf.tuple 和 tf.identity()中有详细的解释,不懂的可以移步了解。

参考文档

1、tensorflow学习笔记(四十一):control dependencies
2、tf.control_dependencies与tf.identity组合详解

查看评论

《深入了解.NET框架》

深入了解.net框架(一)理解受管理的执行(managed excution)    在受管理的执行过程的第一步是设计源程序。如果你想你的应用程序受益于common language runtime(...
  • benben1hao
  • benben1hao
  • 2001-06-19 11:46:00
  • 1270

tensorflow学习笔记(四十一):control dependencies

tensorflowtf.control_dependencies()设计是用来控制计算流图的,给图中的某些计算指定顺序。比如:我们想要获取参数更新后的值,那么我们可以这么组织我们的代码。 opt =...
  • u012436149
  • u012436149
  • 2017-05-14 23:48:46
  • 8376

(Tensorflow之十)tf.control_dependencies()用法

先看一下官方API文档 control_dependencies是用于控制计算流图的先后顺序的。必需先完成control_input的计算,才能执行之后定义的context。 但是,ten...
  • abiggg
  • abiggg
  • 2018-01-10 01:36:49
  • 406

tensorflow训练时的一些注意事项

1,使用batch norm层后,计算损失时,注意添加相应操作 def conv_bn_relu(inputs, num_outputs, phase, kernel_size, stride=1, ...
  • ying86615791
  • ying86615791
  • 2017-06-28 21:56:26
  • 1091

tensorflow22《TensorFlow实战Google深度学习框架》笔记-09-03 TensorBoard改造后的mnist_train code

# 《TensorFlow实战Google深度学习框架》09 TensorBoard可视化 # win10 Tensorflow1.0.1 python3.5.3 # CUDA v8.0 cudnn-...
  • longji
  • longji
  • 2017-04-10 23:57:01
  • 788

tf.control_dependencies()作用及用法

在有些机器学习程序中我们想要指定某些操作执行的依赖关系,这时我们可以使用tf.control_dependencies()来实现。 control_dependencies(control_inpu...
  • PKU_Jade
  • PKU_Jade
  • 2017-06-20 15:33:14
  • 8290

TensorFlow学习笔记(1)对多层卷积网络识别MNIST(MNIST进阶)的理解

这几天在学TensorFlow,从mnist开始,有不少迷惑的地方,先把理解记下来
  • dong_W_
  • dong_W_
  • 2017-12-20 21:22:24
  • 144

Tensorflow基础知识梳理(一)

一、知识框架 二、实战应用  MNIST手写识别代码总结         Description:深度学习实战的第一个练手例子,取60000张图片作为训练集,5w张作为训练集,1w张作为测试...
  • qq_37053885
  • qq_37053885
  • 2018-01-11 16:17:39
  • 79

TensorFlow(五)常用函数与基本操作

tensorflow的基本运作 1、tensorflow的基本运作 2、tf函数 TensorFlow 将图形定义转换成分布式执行的操作, 以充分利用可用的计算资源 (如 CPU 或 GPU。一...
  • jiaoyangwm
  • jiaoyangwm
  • 2018-02-02 22:05:25
  • 169

tf.cond 与 tf.control_dependencies 的控制问题

问题引入在搜索tf.cond的使用方法时,找到了这样的一个问题:运行下面的一段tensorflow代码:pred = tf.constant(True) x = tf.Variable([1]) as...
  • Yan_Joy
  • Yan_Joy
  • 2017-04-18 15:18:41
  • 6011
    个人资料
    持之以恒
    等级:
    访问量: 42万+
    积分: 5059
    排名: 6942
    博客专栏
    最新评论