TL;DR
tf.Print(input,data)
a=tf.Print(a,["value",a,"shape",tf.shape(a)])
tensor a可以定义在代码的任意一个位置,只要在session.run时节点a有数据流过(否则你也不会想要debug它),data就会被打印到终端。
Code
import tensorflow as tf
def _test_():
with tf.variable_scope('ts'):
a=tf.constant(1)
a=tf.Print(a,["value",a,"shape",tf.shape(a)])
return a
import tensorflow as tf
from TryDebug import _test_
if __name__ == '__main__':
with tf.Session() as sess:
print(sess.run(_test_()))
Play with it!
Some Detail
- 信息被打印到标准错误流,而非标准输出流,在pycharm里,前者红色,后者白色

- tf.Print是一个tensor操作,这意味着他也会在图上添加一个节点,这个节点的功能和tf.identity类似,仅传递数据,打印错误输出是它的副作用。
- data的输入必须是string或者tensor
- 实际上,tf.Print的input和data并不一定匹配,input的作用仅仅是将节点添加到图上,而data可以是任何有数据流过的节点。
Note:这篇文章适用于tensorflow2.0的静态计算图+会话机制,对于2.0新增加的keras模式和动态计算图,我尚未学习,也不确定是否有更好的办法!

3万+

被折叠的 条评论
为什么被折叠?



