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操作CouchDB数据库简单示例
Mar 10 Python
Python基于tkinter模块实现的改名小工具示例
Jul 27 Python
python实现堆和索引堆的代码示例
Mar 19 Python
用Python写脚本,实现完全备份和增量备份的示例
Apr 29 Python
Python 做曲线拟合和求积分的方法
Dec 29 Python
PyQt5使用QTimer实现电子时钟
Jul 29 Python
Python调用Windows API函数编写录音机和音乐播放器功能
Jan 05 Python
Python类的绑定方法和非绑定方法实例解析
Mar 04 Python
Python更换pip源方法过程解析
May 19 Python
django有哪些好处和优点
Sep 01 Python
python中字典增加和删除使用方法
Sep 30 Python
python自然语言处理之字典树知识总结
Apr 25 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
Linux下php5.4启动脚本
2014/08/03 PHP
php+mysqli事务控制实现银行转账实例
2015/01/29 PHP
php中序列化与反序列化详解
2017/02/13 PHP
PHP实现限制IP访问的方法
2017/04/20 PHP
php实现自定义中奖项数和概率的抽奖函数示例
2017/05/26 PHP
yii2中LinkPager增加总页数和总记录数的实例
2017/08/28 PHP
JavaScript字符串对象的concat方法实例(用于连接两个或多个字符串)
2014/10/16 Javascript
NodeJS中利用Promise来封装异步函数
2015/02/25 NodeJs
基于javascript实现动态显示当前系统时间
2016/01/28 Javascript
JavaScript实现带播放列表的音乐播放器实例分享
2016/03/07 Javascript
创建一个类Person的简单实例
2016/05/17 Javascript
深入理解angularjs过滤器
2016/05/25 Javascript
AngularJS入门教程之AngularJS 模板
2016/08/18 Javascript
Nodejs进阶:基于express+multer的文件上传实例
2016/11/21 NodeJs
解决vue中使用Axios调用接口时出现的ie数据处理问题
2018/08/13 Javascript
[01:12:27]EG vs Secret 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
Python高效编程技巧
2013/01/07 Python
python实现保存网页到本地示例
2014/03/16 Python
Python与Redis的连接教程
2015/04/22 Python
python开启摄像头以及深度学习实现目标检测方法
2018/08/03 Python
Python查找数组中数值和下标相等的元素示例【二分查找】
2019/02/13 Python
python实现串口通信的示例代码
2020/02/10 Python
给 TensorFlow 变量进行赋值的方式
2020/02/10 Python
From CSV to SQLite3 by python 导入csv到sqlite实例
2020/02/14 Python
matplotlib 范围选区(SpanSelector)的使用
2021/02/24 Python
法雷奥SQA(electric)面试问题
2016/01/23 面试题
会计电算化应届生求职信
2013/11/03 职场文书
升职自荐书范文
2013/11/28 职场文书
采购员的工作职责
2013/12/26 职场文书
计算机专业自荐信
2014/05/24 职场文书
我为党旗添光彩演讲稿
2014/09/10 职场文书
关于九一八事变的演讲稿2014
2014/09/17 职场文书
个人向公司借款协议书
2014/10/09 职场文书
音乐之声观后感
2015/06/04 职场文书
2016大学优秀学生干部事迹材料
2016/03/01 职场文书
十大最强火系宝可梦,喷火龙上榜,第一名有双火属性
2022/03/18 日漫