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远程登录代码
Apr 29 Python
Python中的生成器和yield详细介绍
Jan 09 Python
python中global用法实例分析
Apr 30 Python
Python语言实现将图片转化为html页面
Dec 06 Python
Django 实现admin后台显示图片缩略图的例子
Jul 28 Python
Python 3.8正式发布重要新功能一览
Oct 17 Python
Python坐标线性插值应用实现
Nov 13 Python
Python利用FFT进行简单滤波的实现
Feb 26 Python
Python稀疏矩阵及参数保存代码实现
Apr 18 Python
Python将list元素转存为CSV文件的实现
Nov 16 Python
基于Django快速集成Echarts代码示例
Dec 01 Python
python自动化八大定位元素讲解
Jul 09 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
生成sessionid和随机密码的例子
2006/10/09 PHP
php中inlcude()性能对比详解
2012/09/16 PHP
php实现图片添加水印功能
2014/02/13 PHP
php bootstrap实现简单登录
2016/03/08 PHP
PHP简单实现二维数组赋值与遍历功能示例
2017/10/19 PHP
javascript与有限状态机详解
2014/05/08 Javascript
javascript数组操作方法小结和3个属性详细介绍
2014/07/05 Javascript
Jquery幻灯片特效代码分享--鼠标点击按钮时切换(1)
2015/08/15 Javascript
BootStrap下jQuery自动完成的样式调整
2016/05/30 Javascript
Javascript中级语法快速入手
2016/07/30 Javascript
jQuery购物网页经典制作案例
2016/08/19 Javascript
js 单引号替换成双引号,双引号替换成单引号的实现方法
2017/02/16 Javascript
js实现兼容PC端和移动端滑块拖动选择数字效果
2017/02/16 Javascript
详解React-Native解决键盘遮挡问题(Keyboard遮挡问题)
2017/07/13 Javascript
javascript 面向对象实战思想分享
2017/09/07 Javascript
vue 实现 ios 原生picker 效果及实现思路解析
2017/12/06 Javascript
jQuery层叠选择器用法实例分析
2019/06/28 jQuery
vue实现图片按比例缩放问题操作
2020/08/11 Javascript
Python3 入门教程 简单但比较不错
2009/11/29 Python
详解Django中的权限和组以及消息
2015/07/23 Python
Golang与python线程详解及简单实例
2017/04/27 Python
Python中enumerate()函数编写更Pythonic的循环
2018/03/06 Python
Python多线程:主线程等待所有子线程结束代码
2020/04/25 Python
Python使用plt.boxplot() 参数绘制箱线图
2020/06/04 Python
彻底弄明白CSS3的Media Queries(跨平台设计)
2010/07/27 HTML / CSS
css3 实现圆形旋转倒计时
2018/02/24 HTML / CSS
关于h5中的fetch方法解读(小结)
2017/11/15 HTML / CSS
美国女性卫生用品公司:Thinx
2017/06/30 全球购物
公司年会主持词
2014/03/22 职场文书
学生会主席演讲稿
2014/04/25 职场文书
公司自我介绍演讲稿
2014/08/21 职场文书
安全演讲稿开场白
2014/08/25 职场文书
志愿者工作心得体会
2016/01/15 职场文书
一个家长教育孩子的心得体会
2016/01/15 职场文书
CentOS7安装MySQL8的超级详细教程(无坑!)
2022/06/10 Servers
深入理解pytorch库的dockerfile
2022/06/10 Python