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多线程学习资料
Dec 19 Python
python编写网页爬虫脚本并实现APScheduler调度
Jul 28 Python
python实现多线程暴力破解登陆路由器功能代码分享
Jan 04 Python
python链接Oracle数据库的方法
Jun 28 Python
python类中super()和__init__()的区别
Oct 18 Python
flask中使用蓝图将路由分开写在不同文件实例解析
Jan 19 Python
Python读取txt内容写入xls格式excel中的方法
Oct 11 Python
python 提取key 为中文的json 串方法
Dec 31 Python
PyCharm 创建指定版本的 Django(超详图解教程)
Jun 18 Python
python程序中的线程操作 concurrent模块使用详解
Sep 23 Python
django model通过字典更新数据实例
Apr 01 Python
Python3+Appium安装及Appium模拟微信登录方法详解
Feb 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
php 高性能书写
2010/12/11 PHP
PHP学习之数组值的操作
2011/04/17 PHP
php设计模式 Interpreter(解释器模式)
2011/06/26 PHP
6个超实用的PHP代码片段
2015/08/10 PHP
smarty循环嵌套用法示例分析
2016/07/19 PHP
Laravel 集成微信用户登录和绑定的实现
2019/12/27 PHP
jquery tab插件制作实现代码
2010/06/22 Javascript
javascript学习笔记(五)正则表达式
2011/04/08 Javascript
打豆豆小游戏 用javascript编写的[打豆豆]小游戏
2013/01/08 Javascript
一个判断抢购时间是否到达的简单的js函数
2014/06/23 Javascript
JavaScript实现列表分页功能特效
2015/05/15 Javascript
解决JS表单验证只有第一个IF起作用的问题
2018/12/04 Javascript
uni-app之APP和小程序微信授权方法
2019/05/09 Javascript
搭建Vue从Vue-cli到router路由护卫的实现
2019/11/14 Javascript
es6函数之rest参数用法实例分析
2020/04/18 Javascript
JavaScript面向对象核心知识与概念归纳整理
2020/05/09 Javascript
node运行js获得输出的三种方式示例详解
2020/07/02 Javascript
js对象属性名驼峰式转下划线的实例代码
2020/09/17 Javascript
ES6学习教程之Promise用法详解
2020/11/22 Javascript
python 图片验证码代码
2008/12/07 Python
python处理大数字的方法
2015/05/27 Python
Python删除windows垃圾文件的方法
2015/07/14 Python
实例讲解Python中global语句下全局变量的值的修改
2016/06/16 Python
利用Python实现图书超期提醒
2016/08/02 Python
Python字典对象实现原理详解
2019/07/01 Python
python3 反射的四种基本方法解析
2019/08/26 Python
Python Tricks 使用 pywinrm 远程控制 Windows 主机的方法
2020/07/21 Python
Python经典五人分鱼实例讲解
2021/01/04 Python
俄罗斯第一家篮球店:StreetBall
2020/07/30 全球购物
2014年秋季开学演讲稿
2014/05/24 职场文书
房屋认购协议书
2015/01/29 职场文书
学校扫黄打非工作总结
2015/10/15 职场文书
银行柜员工作心得体会
2016/01/23 职场文书
前端监听websocket消息并实时弹出(实例代码)
2021/11/27 Javascript
Python自动化实战之接口请求的实现
2022/05/30 Python
LeetCode189轮转数组python示例
2022/08/05 Python