tf.metrics 使用过程中发现的一些问题
起因是看到了这么一个帖子:
http://www.cocoachina.com/cms/wap.php?action=article&id=86347
简短来说就是下面的代码 运行起来结果十分的怪异!!!
import tensorflow as tf a = tf.constant(1.)
mean_a, mean_a_uop = tf.metrics.mean(a)
with tf.control_dependencies([mean_a_uop]):
mean_a = tf.identity(mean_a) sess = tf.InteractiveSession()
tf.global_variables_initializer().run()
tf.local_variables_initializer().run() for _ in range(10):
print(sess.run(mean_a))
在CPU上运行:
第一次运行结果:
第二次运行结果:
第三次运行结果:
第四次运行结果:
第五次运行结果:
可以发现上述代码在CPU环境下运行每次结果均不太相同,而且离希望得到结果都不一样。
希望的结果为 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
在GPU上运行:
第一次结果:
第二次结果:
第三次结果:
第四次结果:
第五次结果:
可以发现上述代码在GPU环境下运行每次结果均相同,但都不是希望的结果。
希望的结果为 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
以上则为所引帖子中所提问题。
==================================================================
由上面的问题做了写尝试:(以下测试均在GPU上执行)
1.
import tensorflow as tf a = tf.constant([1.0,])
mean_a, mean_a_uop = tf.metrics.mean(a) sess = tf.InteractiveSession()
tf.global_variables_initializer().run()
tf.local_variables_initializer().run() for _ in range(10):
print(sess.run([mean_a_uop, mean_a]))
print('result:--------------------')
print(sess.run(mean_a))
最终的均值 mean_a 为1.0, 结果正确。
过程中 mean_a_uop 为全局更新操作,结果一直为1.0,结果正确。
过程中 均值 mean_a 在浮动,不一直为1.0, 结果不正确。
2.
import tensorflow as tf
import numpy as np a = tf.constant([1.])
mean_a, mean_a_uop = tf.metrics.mean(a) with tf.control_dependencies([mean_a_uop]):
op=tf.no_op() sess = tf.InteractiveSession()
tf.global_variables_initializer().run()
tf.local_variables_initializer().run() for _ in range(10):
print(sess.run([mean_a, op,mean_a_uop]))
print('result: --------------------')
print(sess.run(mean_a))
最终的均值 mean_a 为1.0, 结果正确。
过程中 mean_a_uop 为全局更新操作,结果一直为1.0,结果正确。
过程中 均值 mean_a 在浮动,不一直为1.0, 结果不正确。
3.
import tensorflow as tf a = tf.constant([1.,])
mean_a, mean_a_uop = tf.metrics.mean(a) with tf.control_dependencies([mean_a_uop]):
mean_a2 = tf.identity(mean_a) sess = tf.InteractiveSession()
tf.global_variables_initializer().run()
tf.local_variables_initializer().run() for _ in range(10):
print(sess.run([mean_a2, mean_a, mean_a_uop]))
print('result: ---------------')
print(sess.run(mean_a))
最终的均值 mean_a 为1.0, 结果正确。
过程中 mean_a_uop 为全局更新操作,结果一直为1.0,结果正确。
过程中 均值 mean_a, mean_a2相等 且在浮动,不一直为1.0, 结果不正确。
===============================================================
根据原帖子将原始代码中的tf.constant 换成 tf.Variable,效果如何呢?
import tensorflow as tf a = tf.Variable(tf.constant(1.))
mean_a, mean_a_uop = tf.metrics.mean(a)
with tf.control_dependencies([mean_a_uop]):
mean_a = tf.identity(mean_a) sess = tf.InteractiveSession()
tf.global_variables_initializer().run()
tf.local_variables_initializer().run() for _ in range(10):
print(sess.run(mean_a))
CPU上运行:
第一次运行结果:
第二次运行结果:
第三次运行结果:
在GPU上运行呢???
第一次运行:
第二次运行:
第三次运行:
===========================================================================
综上发现如果不规范的使用 tf.metrics 会引发不可预知的后果,主要使用不当如下:(虽然如下的做法也没理由出错,但是事实却是常出错,有问题)
mean_a, mean_a_uop = tf.metrics.mean(a)
with tf.control_dependencies([mean_a_uop]):
mean_a = tf.identity(mean_a)
for _ in range(10):
print(sess.run(mean_a))
正确使用如下:
import tensorflow as tf a = tf.Variable(tf.constant(1.))
mean_a, mean_a_uop = tf.metrics.mean(a)
#with tf.control_dependencies([mean_a_uop]):
# mean_a = tf.identity(mean_a) sess = tf.InteractiveSession()
tf.global_variables_initializer().run()
tf.local_variables_initializer().run() for _ in range(10):
print(sess.run(mean_a_uop)) print('result:-------------')
print(sess.run(mean_a))
CPU上运行:
GPU上运行:
解决 tf.metrics 出错问题 的关键就是 不使用 依赖控制 tf.control_dependencies 。
mean_a, mean_a_uop = tf.metrics.mean 中的 均值mean_a 和 更新mean_a_uop 不在一个session执行中获得, 即
如下操作:
for _ in range(10):
print(sess.run(mean_a_uop)) print('result:-------------')
print(sess.run(mean_a))
而且在更新过程中, mean_a_uop 的结果会一直保证正确, mean_a只有在新的session执行中才保证正确。
至于为什么会有这么个结果也是无法解释的,不过这应该是既成事实,使用过程中注意就好,还有就是 依赖控制 慎用 tf.control_dependencies , 不是必须使用的时候就不用。
tf.metrics 使用过程中发现的一些问题的更多相关文章
- 为Secure Store Service生成新密钥,解决“生成密钥过程中发现错误”的问题
我们集成TFS和SharePoint Server以后,一个最常见的需求是通过SharePoint Server的Excel Service读取TFS报表中的信息,利用Excel Service的强大 ...
- 常见Code Review过程中发现的问题-续
上一篇列举了一些比较常见的Code Review问题列表,文末有链接,可追溯查看.本篇为上篇的姊妹篇,继续列举一些上篇遗漏的或不易发现的问题清单,希望能整体性把一些常见的问题表述出来. 测试数据不具有 ...
- 调试过程中发现按f5无法走进jdk源码
debug 模式 ,在fis=new FileInputStream(file); 行打断点 调试过程中发现按f5无法走进jdk源码 package com.lzl.spring.test; impo ...
- Hive通过查询语句向表中插入数据过程中发现的坑
前言 近期在学习使用Hive(版本号0.13.1)的过程中,发现了一些坑,它们也许是Hive提倡的比关系数据库更加自由的体现(同一时候引来一些问题).也许是一些bug.总而言之,这些都须要使用Hive ...
- 常见Code Review过程中发现的问题
软件环境:Spring MVC + MyBatis 主要体现在两个方面,一个是编码习惯问题,另一个是编码质量的问题.编码习惯主要有日志编写.代码注释以及编码风格的问题,而编码质量则与很多方面相关,比如 ...
- 在网站制作过程中发现的block和inline-block不同。
inline-block,简单来说就是在CSS中通过display:inline-block对一个对象指定inline-block属性,可以将对象呈递为内联对象,但是对象的内容作为块对象呈递.有时既希 ...
- VS 2017开发ASP.NET Core Web应用过程中发现的一个重大Bug
今天试着用VS 2017去开发一个.net core项目,想着看看.net core的开发和MVC5开发有什么区别,然后从中发现了一个VS2017的Bug. 首先,我们新建项目,ASP.NET Cor ...
- sqlserver2017安装及连接过程中发现的问题
1.SSMS安装报错,如下图 根据搜索资料发现是防火墙的问题,关闭防火墙就行了. 2.连接用户时报错 这个是因为远程连接相关问题. 首先打开服务器远程连接: 其次点击: SqlServer配置管理器- ...
- vue生命周期updated的触发时机之debug过程中发现的firefox问题
现象描述: 断点位置1 谷歌debug的过程: 火狐debug的过程: 只要在改变数据之后有断点停顿,就会先去执行updated函数 断点位置2 此时火狐和谷歌是一样的效果,但是执行顺序是不一致的 谷 ...
- Mysql: Connect/C++ 使用过程中发现返回 std::string 造成的内存泄露
在使用 Connect/C++ ,测试时发现在调用 getString 出现了内存增长的情况. ConstructOutput(); //打印出当前内存 ;i<;++i) { prepareSt ...
随机推荐
- kettle从入门到精通 第二十二课 kettle carte web服务中文乱码
在windows 上面 carte服务的canvas画布展示的中文正常,但是在linux上面中文展示乱码,如下所示: 原因:linux 机器缺少字体所致. kettle源码中使用字体: 解决方法: 安 ...
- Steam Epic 启动程序默认地址
Steam Epic 启动程(启动器)序默认地址 "D:\Games\EpicAPP\Epic Games\Launcher\Portal\Binaries\Win32\EpicGamesL ...
- 战66 WIN11 亮度热键 快捷键无效
型号:HP ZHAN 66 Pro A 14 G3. 用FN 调节音量是正常的,唯独亮度无效. 参考:怎样调节笔记本电脑屏幕亮度(惠普笔记本亮度调节快捷键失灵) | 说明书网 (shuomingshu ...
- JavaScript模块化笔记
JavaScript模块化笔记 一个模块就是一堆被封装到一个文件当中的代码,并使用export暴露部分代码给其他的文件.模块专注于一小部分功能并与应用的其他部分松耦合,这是因为模块间没有全局变量或共享 ...
- Aspect切面进行统一参数处理demo
Aspect切面进行统一参数处理demo //导入 implementation('org.springframework:spring-aspects:5.3.22') import com.exa ...
- 什么是Web3.0,和区块链又有什么关系?
又是一个莫名其妙的词语的新起-.- 我大致归纳为以下几个点 什么是web3.0 Web 3.0(Web3)是下一代互联网的发展方向,旨在创建一个更加去中心化.用户控制和数据保护的网络环境.与之前的We ...
- RSA密码系统的特定密钥泄露攻击与Coppersmith方法的应用
PrimiHub一款由密码学专家团队打造的开源隐私计算平台,专注于分享数据安全.密码学.联邦学习.同态加密等隐私计算领域的技术和内容. RSA密码系统作为当前最广泛使用的公钥加密算法之一,其安全性依赖 ...
- Mac修改文件名的颜色
文章目录 前言 文件类型 LSCOLORS介绍 颜色 如何设置LSCOLORS环境变量 前言 Mac中修改文件名颜色是通过LSCOLORS这个环境变量来控制的 文件类型 11种文件类型信息如下所示 序 ...
- 配置上新 | 单双四核任选,TI Cortex-A53工业核心板仅198元起!
创龙科技作为TI官方合作伙伴,在2022年9月即推出搭载TI AM62x最新明星处理器的工业核心板-SOM-TL62x. SOM-TL62x工业核心板基于TI Sitara系列AM62x单/双/四核A ...
- 国产自主架构!龙芯2K1000LA工业核心板正式发布!
国产自主架构!龙芯2K1000LA工业核心板正式发布! 原创 Tronlong创龙科技 Tronlong创龙科技 2024-06-13 07:50 广东 Tronlong创龙科技 ,赞18 (点击视频 ...