• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >python > tensorflow实现在函数中用tf.Print输出中间值

tensorflow实现在函数中用tf.Print输出中间值

作者:sjtu_leexx 字体:[增加 减小] 来源:互联网

sjtu_leexx 通过本文主要向大家介绍了tensorflow,tf.Print,中间值等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

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())

运行结果:

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()函数改成这样,则运行结果为:

输出仅被执行了一次,因为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())

运行结果

返回的a_print值为10也是正确的,因为a_print在下文被返回,所以有数据流流经,会被执行,而因为a_print的定义只执行一次,所以只会输出一次。

 

您可能想查找下面的文章:

  • tensorflow模型保存、加载之变量重命名实例
  • tensorflow模型保存、加载之变量重命名实例
  • 使用tensorflow DataSet实现高效加载变长文本输入
  • TensorFlow——Checkpoint为模型添加检查点的实例
  • TensorFlow实现打印每一层的输出
  • tensorflow ckpt模型和pb模型获取节点名称,及ckpt转pb模型实例
  • tensorflow estimator 使用hook实现finetune方式
  • tensorflow查看ckpt各节点名称实例
  • 浅谈tensorflow中Dataset图片的批量读取及维度的操作详解
  • 浅谈Tensorflow 动态双向RNN的输出问题

相关文章

  • Python程序语言快速上手教程
  • Python警察与小偷的实现之一客户端与服务端通信实例
  • 详解在Python程序中自定义异常的方法
  • Python捕捉和模拟鼠标事件的方法
  • Python高效编程技巧
  • Python数据结构之翻转链表
  • python基于urllib实现按照百度音乐分类下载mp3的方法
  • python连接mysql并提交mysql事务示例
  • python实现通过代理服务器访问远程url的方法
  • 在Django中同时使用多个配置文件的方法

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • python模拟登录百度贴吧(百度贴吧登录)实例
    • Python类的动态修改的实例方法
    • python插入数据到列表的方法
    • Python bsddb模块操作Berkeley DB数据库介绍
    • 使用IPython来操作Docker容器的入门指引
    • Python类的基础入门知识
    • python模拟登录百度代码分享(获取百度贴吧等级)
    • python读文件逐行处理的示例代码分享
    • No connection adapters were found
    • 使用 tf.nn.dynamic_rnn 展开时间维度方式

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有