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使用MySQLdb for Python操作数据库教程
Oct 11 Python
在Python中使用SQLite的简单教程
Apr 29 Python
python 借助numpy保存数据为csv格式的实现方法
Jul 04 Python
基于pycharm导入模块显示不存在的解决方法
Oct 13 Python
Python 函数返回值的示例代码
Mar 11 Python
python 实现在tkinter中动态显示label图片的方法
Jun 13 Python
python返回数组的索引实例
Nov 28 Python
Python.append()与Python.expand()用法详解
Dec 18 Python
django数据模型(Model)的字段类型解析
Dec 25 Python
pytest进阶教程之fixture函数详解
Mar 29 Python
用Python写一个简易版弹球游戏
Apr 13 Python
Pytest之测试命名规则的使用
Apr 16 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
世界上第一台立体声收音机
2021/03/01 无线电
解决FastCGI 进程超过了配置的活动超时时限的问题
2013/07/03 PHP
Javascript与PHP验证用户输入URL地址是否正确
2014/10/09 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
学习jquery之一
2007/04/27 Javascript
onclick与listeners的执行先后问题详细解剖
2013/01/07 Javascript
JS操作Cookies的小例子
2013/10/15 Javascript
js中文逗号转英文实现
2014/02/11 Javascript
javascript去除字符串左右两端的空格
2015/02/05 Javascript
js改变style样式和css样式的简单实例
2016/06/28 Javascript
easyui combobox开启搜索自动完成功能的实例代码
2016/11/08 Javascript
Jquery根据浏览器窗口改变调整大小的方法
2017/02/07 Javascript
详细介绍RxJS在Angular中的应用
2017/09/23 Javascript
Vue使用枚举类型实现HTML下拉框步骤详解
2018/02/05 Javascript
JavaScript 中定义函数用 var foo = function () {} 和 function foo()区别介绍
2018/03/01 Javascript
vue.js响应式原理解析与实现
2020/06/22 Javascript
JavaScript常见鼠标事件与用法分析
2019/01/03 Javascript
如何基于jQuery实现五角星评分
2020/09/02 jQuery
python使用递归解决全排列数字示例
2014/02/11 Python
Python ORM框架SQLAlchemy学习笔记之数据添加和事务回滚介绍
2014/06/10 Python
python中xrange用法分析
2015/04/15 Python
Python常用小技巧总结
2015/06/01 Python
Python中的TCP socket写法示例
2018/05/11 Python
Python中常用的8种字符串操作方法
2019/05/06 Python
浅析Python迭代器的高级用法
2020/07/16 Python
CSS3中Animation属性的使用详解
2015/08/06 HTML / CSS
css3 边框、背景、文本效果的实现代码
2018/03/21 HTML / CSS
详解canvas绘制网络字体几种方法
2019/08/27 HTML / CSS
英国Radley包德国官网:Radley London德国
2019/11/18 全球购物
美体小铺法国官方网站:The Body Shop法国
2020/06/04 全球购物
C语言面试题
2015/10/30 面试题
职业女性的职业规划
2014/03/04 职场文书
教师对学生的寄语
2014/04/03 职场文书
公安学专业求职信
2014/07/27 职场文书
新农村建设指导员工作总结
2015/08/13 职场文书
Windows安装Anaconda3的方法及使用过程详解
2021/06/11 Python