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 冒泡,选择,插入排序使用实例
Feb 05 Python
详解python使用pip安装第三方库(工具包)速度慢、超时、失败的解决方案
Dec 02 Python
Python 文本文件内容批量抽取实例
Dec 10 Python
python 多个参数不为空校验方法
Feb 14 Python
学习python分支结构
May 17 Python
python里dict变成list实例方法
Jun 26 Python
使用python快速在局域网内搭建http传输文件服务的方法
Nov 14 Python
用python3读取python2的pickle数据方式
Dec 25 Python
关于多元线性回归分析——Python&SPSS
Feb 24 Python
Python网络爬虫四大选择器用法原理总结
Jun 01 Python
Python DES加密实现原理及实例解析
Jul 17 Python
python文件名批量重命名脚本实例代码
Apr 22 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错误提示failed to open stream: HTTP request failed!的完美解决方法
2011/06/06 PHP
php.ini修改php上传文件大小限制的方法详解
2013/06/17 PHP
php返回当前日期或者指定日期是周几
2015/05/21 PHP
JavaScript的Function详细
2006/11/14 Javascript
HTML Color Picker(js拾色器效果)
2013/08/27 Javascript
js判断客户端是iOS还是Android等移动终端的方法
2013/12/11 Javascript
zeroclipboard 单个复制按钮和多个复制按钮的实现方法
2014/06/14 Javascript
Web表单提交之disabled问题js解决方法
2015/01/13 Javascript
JS获取时间的相关函数及时间戳与时间日期之间的转换
2016/02/04 Javascript
Javascript农历与公历相互转换的简单实例
2016/10/09 Javascript
详谈Ajax请求中的async:false/true的作用(ajax 在外部调用问题)
2017/02/10 Javascript
js实现产品缩略图效果
2017/03/10 Javascript
彻底搞懂JavaScript中的apply和call方法(必看)
2017/09/18 Javascript
react native与webview通信的示例代码
2017/09/25 Javascript
vue表单中遍历表单操作按钮的显示隐藏示例
2019/10/30 Javascript
[01:22]DOTA2神秘商店携大量周边降临完美大师赛
2017/11/07 DOTA
[01:11:37]完美世界DOTA2联赛PWL S2 SZ vs FTD.C 第一场 11.19
2020/11/19 DOTA
在Python下使用Txt2Html实现网页过滤代理的教程
2015/04/11 Python
python利用OpenCV2实现人脸检测
2020/04/16 Python
python导入模块交叉引用的方法
2019/01/19 Python
python 字符串追加实例
2019/07/20 Python
Python交互式图形编程的实现
2019/07/25 Python
Python使用matplotlib绘制Logistic曲线操作示例
2019/11/28 Python
Python迭代器模块itertools使用原理解析
2019/12/11 Python
Python实现链表反转的方法分析【迭代法与递归法】
2020/02/22 Python
解析Tensorflow之MNIST的使用
2020/06/30 Python
KEETSA环保床垫:更好的睡眠,更好的生活!
2016/11/24 全球购物
印度最好的在线药品订购网站:PharmEasy
2018/11/30 全球购物
Contém1g官网:巴西彩妆品牌
2020/01/17 全球购物
课程设计心得体会
2013/12/28 职场文书
工作过失检讨书
2014/02/23 职场文书
《广玉兰》教学反思
2014/04/14 职场文书
销售内勤岗位职责
2015/02/10 职场文书
党员个人总结自评
2015/02/14 职场文书
2016党员党章学习心得体会
2016/01/14 职场文书
关于mysql中string和number的转换问题
2022/06/14 MySQL