tensorflow之control_dependencies
声明:
- 翻译tensorflow官方文档并进行了总结
- 参考博客tensorflow学习笔记(四十一):control dependencies
tf.control_dependecies()
- 了解
control_dependencies()
的顺序控制机制 tf.control_dependencies()
在batch normalization中的使用示例control_dependencies()
两种不正确的使用方式
control_dependencies介绍
例1
with tf.control_dependencies([a, b, c]):d = ...e = ...
session在运行d、e之前会先运行a、b、c。在with tf.control_dependencies
之内的代码块受到顺序控制机制的影响。
例2
with tf.control_dependencies([a, b]):with tf.control_dependencies([c, d]):e = ...
session在运行e之前会先运行a、b、c、d。因为依赖会随着with tf.control_dependencies
的嵌套一直继承下去。
例3
with tf.control_dependencies([a, b]):with tf.control_dependencies(None): # 第二层上下文管理器with tf.control_dependencies([c, d]):e = ...
session在运行e之前会先运行c、d,不需要运行a、b。因为在第二层的上下文管理器中,参数control_inputs
的值为None
,如此将会清除之前所有的依赖。
在BN中的使用
with tf.control_dependencies(tf.get_collection(tf.GraphKeys.UPDATE_OPS)):train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(cross_entropy)
这样,在每次迭代调用train_step
之前都会先当前batch下的均值和方差的移动平均值。
几种不正确的使用方式
例1
# 不正确
def my_func(pred, tensor):t = tf.matmul(tensor, tensor)with tf.control_dependencies([pred]):# matmul op的定义在context之外,context内只有一个op或tensor不能继承依赖。return t# 应改为
def my_func(pred, tensor):with tf.control_dependencies([pred]):# 应将t的创建放到context之内t = tf.matmul(tensor, tensor)return t
例2
# 不正确
loss = model.loss()
with tf.control_dependencies(dependencies):loss = loss + tf.constant(1)
return tf.gradients(loss, model.variables)
因为常数项tf.constant(1)
在back propagation时被忽略了,所以依赖性在BP的时候也不会被执行。
例3
w = tf.Variable(1.0)
ema = tf.train.ExponentialMovingAverage(0.9)
update = tf.assign_add(w, 1.0)ema_op = ema.apply([update])
with tf.control_dependencies([ema_op]):ema_val = ema.average(update)with tf.Session() as sess:tf.global_variables_initializer().run()for i in range(3):print(sess.run([ema_val]))# 应改为
with tf.control_dependencies([ema_op]):ema_val = tf.identity(ema.average(update)) # 加一个identity
例4
import tensorflow as tf
w = tf.Variable(1.0)
ema = tf.train.ExponentialMovingAverage(0.9)
update = tf.assign_add(w, 1.0)ema_op = ema.apply([update])
with tf.control_dependencies([ema_op]):w1 = tf.Variable(2.0)ema_val = ema.average(update)with tf.Session() as sess:tf.global_variables_initializer().run()for i in range(3):print(sess.run([ema_val, w1]))
这种情况下,control_dependencies
也不工作,原因如下:
#这段代码出现在Variable类定义文件中第287行,
# 在创建Varible时,tensorflow是移除了dependencies了的
#所以会出现 control 不住的情况
with ops.control_dependencies(None):...
https://blog.csdn.net/hustqb/article/details/83545310
tensorflow之control_dependencies相关推荐
- tensorflow学习笔记:tf.control_dependencies,tf.GraphKeys.UPDATE_OPS,tf.get_collection
tf.control_dependencies(control_inputs): control_dependencies(control_inputs) ARGS: control_inputs:在 ...
- 【转】tensorflow中的batch_norm以及tf.control_dependencies和tf.GraphKeys.UPDATE_OPS的探究
笔者近来在tensorflow中使用batch_norm时,由于事先不熟悉其内部的原理,因此将其错误使用,从而出现了结果与预想不一致的结果.事后对其进行了一定的调查与研究,在此进行一些总结. 一.错误 ...
- TensorFlow算子融合
TensorFlow算子融合 • TensorFlow的特点: o 真正的可移植性 o 引入各种计算设备的支持,包括CPU,GPU,以及能够很好的运行在各种系统的移动端 o 多语言支持 o 支持C++ ...
- TensorFlow学习笔记——实现经典LeNet5模型
TensorFlow实现LeNet-5模型 文章目录 TensorFlow实现LeNet-5模型 前言 一.什么是TensorFlow? 计算图 Session 二.什么是LeNet-5? INPUT ...
- 使用自己的数据集训练MobileNet、ResNet实现图像分类(TensorFlow)| CSDN博文精选
作者 | pan_jinquan 来源 | CSDN博文精选 之前写了一篇博客<使用自己的数据集训练GoogLenet InceptionNet V1 V2 V3模型(TensorFlow)&g ...
- TensorFlow练习16: 根据大脸判断性别和年龄
本帖使用TensorFlow做一个根据脸部推断照片人物年龄和性别的练习,网上有很多类似app. 训练数据 – Adience数据集 Adience数据集来源为Flickr相册,由用户使用iPhone或 ...
- TensorFlow练习24: GANs-生成对抗网络 (生成明星脸)
GANs是Generative Adversarial Networks的简写,中文翻译为生成对抗网络,它最早出现在2014年Goodfellow发表的论文中:Generative Adversari ...
- 使用Tensorflow实现残差网络ResNet-50
这篇文章讲解的是使用Tensorflow实现残差网络resnet-50. 侧重点不在于理论部分,而是在于代码实现部分.在github上面已经有其他的开源实现,如果希望直接使用代码运行自己的数据,不建议 ...
- Tensorflow BatchNormalization详解:4_使用tf.nn.batch_normalization函数实现Batch Normalization操作...
使用tf.nn.batch_normalization函数实现Batch Normalization操作 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 吴恩达deeplearnin ...
最新文章
- 从技术谈到管理,把系统优化的技术用到企业管理
- 华为某员工欲离职,看到年终奖后犹豫了:再干一年吧!
- iOS 隐藏顶部状态栏方式和更改颜色
- Ubuntu install of ROS Melodic
- 推销自己的海盗猫王运营商
- 简述ipython的特点 app_介绍、基本语法、流程控制
- DolphinDB配置
- More Effective C++ 笔记
- 微服务配置中心实战:Spring + MyBatis + Druid + Nacos 1
- [转载]一个本科生在世界五大顶尖咨询公司实习心得
- 电荷泵负电源芯片SGM3207
- Java解析省市县树形结构工具类
- Socket编程(Android客户端+PC服务器端)
- cairo填充_cairo 图形库
- JDK Oracle 官网下载地址
- 理解Linux中的进程状态
- 百度的专业检索方法(我们所不知道的搜索语法)
- JAVA实现CSV文件转JSON。
- 三菱PLC与第三方设备TCP通讯_不用在PLC内编程,快速实现西门子与欧姆龙、三菱等品牌的PLC之间实时通讯...
- JavaScript的数据存储方式
热门文章
- MINA,xSocket同样的性能缺陷及陷阱,Grizzly better
- web 前端必备学习指南-精华
- 10个最好的 Node.js MVC 框架
- 黑苹果mac未能安装在你的电脑上_经历了无数次失败以后,我终于“吃”上了黑苹果,经验分享!...
- python中的leap_Python-规则打破了leap年?
- 超链接一般有两种表现形式_外链的三种常见表现形式
- Win10不能直接拖文件/Foxmail不能拖文件解决办法
- HTML5 -canvas拖拽、移动 绘制图片可操作移动,拖动
- VMware网络连接模式—桥接、NAT以及仅主机模式的详细介绍和区别
- 一个很奇特的异常 tmpFile.renameTo(classFile) failed