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中逗号的三种作用实例分析
Jun 08 Python
Python实现二叉搜索树
Feb 03 Python
python re模块findall()函数实例解析
Jan 19 Python
python实现日常记账本小程序
Mar 10 Python
Python格式化日期时间操作示例
Jun 28 Python
简单了解django orm中介模型
Jul 30 Python
python 实现在shell窗口中编写print不向屏幕输出
Feb 19 Python
利用Python中的Xpath实现一个在线汇率转换器
Sep 09 Python
Python-split()函数实例用法讲解
Dec 18 Python
python实现学生通讯录管理系统
Feb 25 Python
python自动计算图像数据集的RGB均值
Jun 18 Python
Python基本的内置数据类型及使用方法
Apr 13 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
浅析ThinkPHP中的pathinfo模式和URL重写
2014/01/06 PHP
PHP常用函数之根据生日计算年龄功能示例
2019/10/21 PHP
jquery cookie的用法总结
2013/11/18 Javascript
javascript列表框操作函数集合汇总
2013/11/28 Javascript
javascript实现一个数值加法函数
2015/06/26 Javascript
20分钟轻松创建自己的Bootstrap站点
2016/05/12 Javascript
JavaScript调试之console.log调试的一个小技巧分享
2017/08/07 Javascript
Angular中的$watch方法详解
2017/09/18 Javascript
Mac中安装nvm的教程分享
2017/12/11 Javascript
快速解决vue-cli不能初始化webpack模板的问题
2018/03/20 Javascript
vue如何安装使用Quill富文本编辑器
2018/09/21 Javascript
基于Vue实现图片在指定区域内移动的思路详解
2018/11/11 Javascript
小程序二次贝塞尔曲线实现购物车商品曲线飞入效果
2019/01/07 Javascript
Vue动态生成表格的行和列
2019/07/18 Javascript
vue设置一开始进入的页面教程
2019/10/28 Javascript
[03:48]显微镜下的DOTA2第四期——TP动作
2014/06/20 DOTA
[52:20]DOTA2-DPC中国联赛正赛 SAG vs XGBO3 第一场 3月5日
2021/03/11 DOTA
机器学习python实战之决策树
2017/11/01 Python
Python2与python3中 for 循环语句基础与实例分析
2017/11/20 Python
详解TensorFlow在windows上安装与简单示例
2018/03/05 Python
使用Eclipse如何开发python脚本
2018/04/11 Python
PyQt5每天必学之布局管理
2018/04/19 Python
python 3.3 下载固定链接文件并保存的方法
2018/12/18 Python
django 模型中的计算字段实例
2020/05/19 Python
selenium携带cookies模拟登陆CSDN的实现
2021/01/19 Python
IBatis持久层技术
2016/07/18 面试题
司机辞职报告范文
2014/01/20 职场文书
电子专业毕业生自荐信
2014/05/25 职场文书
广告学专业求职信
2014/06/19 职场文书
幼儿园托班开学寄语(2015秋季)
2015/05/27 职场文书
入党转正介绍人意见
2015/06/03 职场文书
防震减灾主题班会
2015/08/14 职场文书
电力安全学习心得体会
2016/01/18 职场文书
《7的乘法口诀》教学反思
2016/02/18 职场文书
2019大学生预备党员转正思想汇报
2019/06/21 职场文书
一篇文章弄清楚Ajax请求的五个步骤
2022/03/17 Javascript