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实现在函数中用tf.Print输出中间值就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 明达年度发烧碟MasterSuperiorAudiophile2021[DSF]
- 英文DJ 《致命的温柔》24K德国HD金碟DTS 2CD[WAV+分轨][1.7G]
- 张学友1997《不老的传说》宝丽金首版 [WAV+CUE][971M]
- 张韶涵2024 《不负韶华》开盘母带[低速原抓WAV+CUE][1.1G]
- lol全球总决赛lcs三号种子是谁 S14全球总决赛lcs三号种子队伍介绍
- lol全球总决赛lck三号种子是谁 S14全球总决赛lck三号种子队伍
- 群星.2005-三里屯音乐之男孩女孩的情人节【太合麦田】【WAV+CUE】
- 崔健.2005-给你一点颜色【东西音乐】【WAV+CUE】
- 南台湾小姑娘.1998-心爱,等一下【大旗】【WAV+CUE】
- 【新世纪】群星-美丽人生(CestLaVie)(6CD)[WAV+CUE]
- ProteanQuartet-Tempusomniavincit(2024)[24-WAV]
- SirEdwardElgarconductsElgar[FLAC+CUE]
- 田震《20世纪中华歌坛名人百集珍藏版》[WAV+CUE][1G]
- BEYOND《大地》24K金蝶限量编号[低速原抓WAV+CUE][986M]
- 陈奕迅《准备中 SACD》[日本限量版] [WAV+CUE][1.2G]