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基于递归算法实现的走迷宫问题
Aug 04 Python
Python实现自动上京东抢手机
Feb 06 Python
Python 3.x 安装opencv+opencv_contrib的操作方法
Apr 02 Python
python爬虫_实现校园网自动重连脚本的教程
Apr 22 Python
python实现log日志的示例代码
Apr 28 Python
使用 Python 实现文件递归遍历的三种方式
Jul 18 Python
Python标准库shutil用法实例详解
Aug 13 Python
Python脚本去除文件的只读性操作
Mar 05 Python
Python优秀开源项目Rich源码解析的流程分析
Jul 06 Python
Python3爬虫里关于识别微博宫格验证码的知识点详解
Jul 30 Python
python+requests接口自动化框架的实现
Aug 31 Python
python 实现端口扫描工具
Dec 18 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实现读取和编写XML DOM代码
2010/04/07 PHP
最新用php获取谷歌PR值算法,附上php查询PR值代码示例
2011/12/25 PHP
php实现httpRequest的方法
2015/03/13 PHP
php结合mysql与mysqli扩展处理事务的方法
2016/06/29 PHP
Yii2使用dropdownlist实现地区三级联动功能的方法
2016/07/18 PHP
解决 firefox 不支持 document.all的方法
2007/03/12 Javascript
javascript回车完美实现tab切换功能
2014/03/13 Javascript
node.js中的path.resolve方法使用说明
2014/12/08 Javascript
简介JavaScript中toTimeString()方法的使用
2015/06/12 Javascript
Bootstrap布局方式详解
2016/05/27 Javascript
Bootstrap中的Panel和Table全面解析
2016/06/13 Javascript
jquery自定义显示消息数量
2017/12/19 jQuery
Node.js使用cookie保持登录的方法
2018/05/11 Javascript
深入理解Puppeteer的入门教程和实践
2019/03/05 Javascript
详解React项目中碰到的IE问题
2019/03/14 Javascript
vue router导航守卫(router.beforeEach())的使用详解
2019/04/19 Javascript
手把手带你搭建一个node cli的方法示例
2020/08/07 Javascript
[02:36]DOTA2上海特锦赛 回忆电竞生涯的重要瞬间
2016/03/25 DOTA
Python实现读取目录所有文件的文件名并保存到txt文件代码
2014/11/22 Python
详解python 注释、变量、类型
2018/08/10 Python
Python中的枚举类型示例介绍
2019/01/09 Python
python 根据时间来生成唯一的字符串方法
2019/01/14 Python
小女主人连衣裙:Little Mistress
2017/07/10 全球购物
JD Sports法国:英国篮球和运动时尚的领导者
2017/09/28 全球购物
美国地毯购买网站:Rugs USA
2019/02/23 全球购物
学院领导推荐信
2013/10/30 职场文书
大学生活学习的自我评价
2013/12/03 职场文书
退休感言
2014/01/28 职场文书
实习单位评语
2014/04/26 职场文书
国旗下的讲话演讲稿
2014/05/08 职场文书
董事会决议范本
2015/07/01 职场文书
运动会开幕式致辞
2015/07/29 职场文书
大学生饮品店创业计划书范文
2019/07/10 职场文书
七个Python必备的GUI库
2021/04/27 Python
为什么RedisCluster设计成16384个槽
2021/09/25 Redis
python 管理系统实现mysql交互的示例代码
2021/12/06 Python