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 相关文章推荐
详解Django中的ifequal和ifnotequal标签使用
Jul 16 Python
python常见排序算法基础教程
Apr 13 Python
python3实现全角和半角字符转换的方法示例
Sep 21 Python
python环形单链表的约瑟夫问题详解
Sep 27 Python
Python3爬虫之自动查询天气并实现语音播报
Feb 21 Python
python学生管理系统学习笔记
Mar 19 Python
如何用C代码给Python写扩展库(Cython)
May 17 Python
django中SMTP发送邮件配置详解
Jul 19 Python
Python中最好用的命令行参数解析工具(argparse)
Aug 23 Python
Python selenium爬取微信公众号文章代码详解
Aug 12 Python
python Selenium 库的使用技巧
Oct 16 Python
python实现图片转字符画的完整代码
Feb 21 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中的实现trim函数代码
2007/03/19 PHP
PHP5 面向对象(学习记录)
2009/12/02 PHP
PHP和JavaScrip分别获取关联数组的键值示例代码
2013/09/16 PHP
ThinkPHP实现将本地文件打包成zip下载
2014/06/26 PHP
php中将一段数据存到一个txt文件中并显示其内容
2014/08/15 PHP
PHP curl批处理及多请求并发实现方法分析
2018/08/15 PHP
Smarty模板配置实例简析
2019/07/20 PHP
JavaScript CSS修改学习第一章 查找位置
2010/02/19 Javascript
javascript 二分法(数组array)
2010/04/24 Javascript
javascript中的作用域和上下文使用简要概述
2013/12/05 Javascript
详谈javascript中的cookie
2015/06/03 Javascript
jquery实现浮动的侧栏实例
2015/06/25 Javascript
jquery实现表单输入时提示文字滑动向上效果
2015/08/10 Javascript
JavaScript编写一个简易购物车功能
2016/09/17 Javascript
Electron-vue脚手架改造vue项目的方法
2018/10/22 Javascript
jQuery实现html可联动的百分比进度条
2020/03/26 jQuery
pycharm 使用心得(九)解决No Python interpreter selected的问题
2014/06/06 Python
为Python的web框架编写前端模版的教程
2015/04/30 Python
Python MySQLdb Linux下安装笔记
2015/05/09 Python
python实现将html表格转换成CSV文件的方法
2015/06/28 Python
python实现快速排序的示例(二分法思想)
2018/03/12 Python
pyqt5 实现多窗口跳转的方法
2019/06/19 Python
简单了解Python3里的一些新特性
2019/07/13 Python
djano一对一、多对多、分页实例代码
2019/08/16 Python
在pytorch中对非叶节点的变量计算梯度实例
2020/01/10 Python
详解pandas绘制矩阵散点图(scatter_matrix)的方法
2020/04/23 Python
用CSS禁用输入法(CSS3 UI规范)实例解析
2012/12/04 HTML / CSS
HTML5离线缓存Manifest是什么
2016/03/09 HTML / CSS
美国第一香水网站:Perfume.com
2017/01/23 全球购物
环法自行车赛官方商店:Le Tour de France
2017/08/27 全球购物
体育系毕业生求职自荐信
2014/04/16 职场文书
爱心捐款倡议书范文
2014/05/12 职场文书
2015年审计人员工作总结
2015/05/26 职场文书
浪漫婚礼主持词开场白
2015/11/24 职场文书
2016年十一促销广告语
2016/01/28 职场文书
python pygame 开发五子棋双人对弈
2022/05/02 Python