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 相关文章推荐
python将多个文本文件合并为一个文本的代码(便于搜索)
Mar 13 Python
python实现的一个p2p文件传输实例
Jun 04 Python
github配置使用指南
Nov 18 Python
Python实现各种排序算法的代码示例总结
Dec 11 Python
python利用正则表达式搜索单词示例代码
Sep 24 Python
Python用户推荐系统曼哈顿算法实现完整代码
Dec 01 Python
python DataFrame 修改列的顺序实例
Apr 10 Python
查看TensorFlow checkpoint文件中的变量名和对应值方法
Jun 14 Python
python实现批量解析邮件并下载附件
Jun 19 Python
Python rstrip()方法实例详解
Nov 11 Python
基于python3抓取pinpoint应用信息入库
Jan 08 Python
python GUI库图形界面开发之PyQt5浏览器控件QWebEngineView详细使用方法
Feb 26 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
解析crontab php自动运行的方法
2013/06/24 PHP
PHP使用数组依次替换字符串中匹配项
2016/01/08 PHP
js跳转页面方法总结
2014/01/29 Javascript
基于 Docker 开发 NodeJS 应用
2014/07/30 NodeJs
js css 实现遮罩层覆盖其他页面元素附图
2014/09/22 Javascript
js+jquery常用知识点汇总
2015/03/03 Javascript
jQuery对指定元素中指定字符串进行替换的方法
2015/03/17 Javascript
javascript实现控制浏览器全屏
2015/03/30 Javascript
AngularJS入门教程之更多模板详解
2016/08/19 Javascript
jQuery插件MovingBoxes实现左右滑动中间放大图片效果
2017/02/28 Javascript
浅谈关于JS下大批量异步任务按顺序执行解决方案一点思考
2019/01/08 Javascript
js笔试题-接收get请求参数
2019/06/15 Javascript
javascript面向对象三大特征之封装实例详解
2019/07/24 Javascript
[19:14]DOTA2 HEROS教学视频教你分分钟做大人-维萨吉
2014/06/24 DOTA
[46:55]LGD vs Liquid 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
使用Python脚本来获取Cisco设备信息的示例
2015/05/04 Python
Python写的一个简单监控系统
2015/06/19 Python
详解Django框架中的视图级缓存
2015/07/23 Python
Python中django学习心得
2017/12/06 Python
Python字符串拼接六种方法介绍
2017/12/18 Python
python+pillow绘制矩阵盖尔圆简单实例
2018/01/16 Python
Python高级特性切片(Slice)操作详解
2018/09/27 Python
Python之inspect模块实现获取加载模块路径的方法
2018/10/16 Python
对python 多线程中的守护线程与join的用法详解
2019/02/18 Python
OpenCV 边缘检测
2019/07/10 Python
Python中低维数组填充高维数组的实现
2019/12/02 Python
Django在Model保存前记录日志实例
2020/05/14 Python
Holiday Inn中国官网:IHG旗下假日酒店预订
2018/04/08 全球购物
客服主管岗位职责
2013/12/13 职场文书
信息技术毕业生自荐信范文
2014/03/13 职场文书
2014年党课学习心得体会
2014/07/08 职场文书
个人四风对照检查材料
2014/09/26 职场文书
科长个人四风问题整改措施思想汇报
2014/10/13 职场文书
先进工作者个人总结
2015/02/15 职场文书
2016新年晚会开场白
2015/12/03 职场文书
小学班主任培训心得体会
2016/01/07 职场文书