tensorflow实现在函数中用tf.Print输出中间值


Posted in Python onJanuary 21, 2020

tensorflow由于其基于静态图的模式,导致写代码的时候很难调试,除了用官方的调试工具外,最直接的方法就是把中间结果输出出来查看,然而,直接用print函数只能输出tensor变量的形状,而不是数值,想要输出tensor的具体数值需要用tf.Print函数。网上有很多关于这个函数使用方法的说明,这里简要介绍:

Print(
 input_,
 data,
 message=None,
 first_n=None,
 summarize=None,
 name=None
 )

参数:

input_:通过这个操作的张量。 (流入的数据流)

data:计算 op 时要打印的张量列表。(用[ ]引起来的一串需要打印的东西,用逗号隔开)

message:一个字符串,错误消息的前缀。

first_n:只记录 first_n 次数。负数日志,这是默认的。

summarize:只打印每个张量的固定数目的条目。如果没有,则每个输入张量最多打印3个元素。

name:操作的名称(可选)

然而网上大部分资源都是介绍如何在主函数中先建立一个op,再开启一个Session执行sess.run(op)的方法,但是如果想要输出函数中的中间值而该值又未传回主函数呢?这种情况下无法在函数中开启一个新的Session,但是仍然可以用tf.Print建立op来实现。

import tensorflow as tf
import os

os.environ["CUDA_VISIBLE_DEVICES"] = "0"

def test():
 a=tf.constant(0)
 for i in range(10): 
  a_print = tf.Print(a,['a_value: ',a])
  a=a_print+1
 return a
 
if __name__=='__main__':
 with tf.Session() as sess:
  sess.run(test())

运行结果:

tensorflow实现在函数中用tf.Print输出中间值

a_print可以理解为在图中新增了一个节点,在后续代码中当有别的变量使用了a_print时(如上例a=a_print+1),就会有数据从a_print节点上流过,就会输出值,而究竟会输出几次值呢?这其实并不是看下文中a_print被使用了几次,而是看数据流要从该节点上流经几次,可以理解为a_print这个op被“定义”了几次。

def test():
 a=tf.constant(0)
 a_print = tf.Print(a,['a_value: ',a])
 for i in range(10): 
  a=a_print+1
 return a
 
if __name__=='__main__':
 with tf.Session() as sess:
  sess.run(test())

如果把test()函数改成这样,则运行结果为:

tensorflow实现在函数中用tf.Print输出中间值

输出仅被执行了一次,因为a_print这个op只被定义了一次,虽然后面在循环里不断被a使用,但是数据只从它身上经过了一次,所以只会print一次,并且a_print的值永远为0,最终返回的a的值也为1。

再把代码改成下例:

def test():
 a=tf.constant(0)
 a_print = tf.Print(a,['a_value: ',a])
 for i in range(10): 
  a_print=a_print+1
 return a
 
if __name__=='__main__':
 with tf.Session() as sess:
  sess.run(test())

运行结果是什么也不会输出,因为a_print这个op没有和别的变量发生关系,它没有被别的变量使用,在图里为孤立的一个节点,没有数据流过,就不会被执行。

而如果改成这样

def test():
 a=tf.constant(0)
 a_print = tf.Print(a,['a_value: ',a])
 for i in range(10): 
  a_print=a_print+1
 return a_print
 
if __name__=='__main__':
 with tf.Session() as sess:
  sess.run(test())

运行结果

tensorflow实现在函数中用tf.Print输出中间值

返回的a_print值为10也是正确的,因为a_print在下文被返回,所以有数据流流经,会被执行,而因为a_print的定义只执行一次,所以只会输出一次。

以上这篇tensorflow实现在函数中用tf.Print输出中间值就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Django1.3添加app提示模块不存在的解决方法
Aug 26 Python
Pycharm 实现下一个文件引用另外一个文件的方法
Jan 17 Python
详解【python】str与json类型转换
Apr 29 Python
python五子棋游戏的设计与实现
Jun 18 Python
pyqt 实现为长内容添加滑轮 scrollArea
Jun 19 Python
Python 使用 PyMysql、DBUtils 创建连接池提升性能
Aug 14 Python
简单分析python的类变量、实例变量
Aug 23 Python
使用tensorflow DataSet实现高效加载变长文本输入
Jan 20 Python
python通过文本在一个图中画多条线的实例
Feb 21 Python
Python数据正态性检验实现过程
Apr 18 Python
Python基于callable函数检测对象是否可被调用
Oct 16 Python
10个顶级Python实用库推荐
Mar 04 Python
Python实现随机生成任意数量车牌号
Jan 21 #Python
tensorflow模型继续训练 fineturn实例
Jan 21 #Python
tensorflow ckpt模型和pb模型获取节点名称,及ckpt转pb模型实例
Jan 21 #Python
tensorflow查看ckpt各节点名称实例
Jan 21 #Python
python同义词替换的实现(jieba分词)
Jan 21 #Python
tensorflow模型保存、加载之变量重命名实例
Jan 21 #Python
tensorflow实现测试时读取任意指定的check point的网络参数
Jan 21 #Python
You might like
php中使用exec,system等函数调用系统命令的方法(不建议使用,可导致安全问题)
2012/09/07 PHP
探讨:如何使用PHP实现计算两个日期间隔的年、月、周、日数
2013/06/13 PHP
PHP封装的一个支持HTML、JS、PHP重定向的多功能跳转函数
2014/06/19 PHP
PHP获取路径和目录的方法总结【必看篇】
2017/03/04 PHP
PHP实现的Redis多库选择功能单例类
2017/07/27 PHP
PHP 布尔值的自增与自减的实现方法
2018/05/03 PHP
Laravel5.7 数据库操作迁移的实现方法
2019/04/12 PHP
[JS源码]超长文章自动分页(客户端版)
2007/01/09 Javascript
Ajax+Json 级联菜单实现代码
2009/10/27 Javascript
offsetParent 算法分析
2010/04/05 Javascript
node.js中的fs.chownSync方法使用说明
2014/12/16 Javascript
JavaScript正则表达式匹配 div  style标签
2016/03/15 Javascript
基于JavaScript实现自定义滚动条
2017/01/25 Javascript
Javascript中click与blur事件的顺序详析
2017/04/25 Javascript
JS+HTML5实现图片在线预览功能
2017/07/22 Javascript
Vue的百度地图插件尝试使用
2017/09/06 Javascript
jQuery滚动条美化插件nicescroll简单用法示例
2018/04/18 jQuery
vue组件中watch props根据v-if动态判断并挂载DOM的问题
2019/05/12 Javascript
Node.js 的 GC 机制详解
2019/06/03 Javascript
跟老齐学Python之总结参数的传递
2014/10/10 Python
Python中使用不同编码读写txt文件详解
2015/05/28 Python
Python实现通过解析域名获取ip地址的方法分析
2019/05/17 Python
简单了解python中对象的取反运算符
2019/07/01 Python
Python + Flask 实现简单的验证码系统
2019/10/01 Python
TensorFlow自定义损失函数来预测商品销售量
2020/02/05 Python
Python类的绑定方法和非绑定方法实例解析
2020/03/04 Python
利用python绘制数据曲线图的实现
2020/04/09 Python
使用tensorflow根据输入更改tensor shape
2020/06/23 Python
Python获取android设备cpu和内存占用情况
2020/11/15 Python
美国照明、家居装饰和家具购物网站:Bellacor
2017/09/20 全球购物
护士辞职信范文
2014/01/19 职场文书
党员组织生活会发言材料
2014/10/17 职场文书
小学二年级数学教学计划
2015/01/20 职场文书
学历证明范文
2015/06/16 职场文书
入队仪式主持词
2015/07/04 职场文书
90行Python代码开发个人云盘应用
2021/04/20 Python