看来在Tensorflow中,至少有三种方法可以打印出张量的值。我到处阅读,但仍然很困惑。
这些作者似乎将不同的用法总结为:
print
:只能打印出张量的某些属性,例如它的形状,因为在计算图之外它只是一个操作。tensor.eval()
: 不确定它与tf.print()
tf.print()
:可以输出张量的实际值,但必须插入到图中的某个位置并被其他操作使用,否则它将是悬空的并且仍然不会打印。我的困惑可能还在于我不确定我们可以在张量流计算图中访问多少Python功能,或者计算图“结束”和Python代码“开始”在哪里。例如
sess.run()
稍后调用时,会调用这一行吗?tensor.eval()
和 和有什么区别tf.print()
?我应该如何以不同的方式使用它们?print()
第一次构建图时将调用本机 Python语句。看一下这个:
a = tf.placeholder(shape=None, dtype=tf.int32)
b = tf.placeholder(shape=None, dtype=tf.int32)
print("a is ",a," while b is ",b)
c = tf.add(a, b)
with tf.Session() as sess:
print(sess.run(c, feed_dict={a: 1, b: 2}))
print(sess.run(c, feed_dict={a: 3, b: 1}))
Run Code Online (Sandbox Code Playgroud)
通过执行此代码块,输出为:
# a is Tensor("Placeholder:0", dtype=int32) while b is Tensor("Placeholder_1:0", dtype=int32)
# 3
# 4
Run Code Online (Sandbox Code Playgroud)
另一方面,让我们看看tf.print()
:
a = tf.placeholder(shape=None, dtype=tf.int32)
b = tf.placeholder(shape=None, dtype=tf.int32)
print_op = tf.print("a is ",a," while b is ",b)
with tf.control_dependencies([print_op]):
c = tf.add(a, b)
with tf.Session() as sess:
print(sess.run(c, feed_dict={a: 1, b: 2}))
print(sess.run(c, feed_dict={a: 3, b: 1}))
Run Code Online (Sandbox Code Playgroud)
因此,根据下面的输出,我们可以看到,如果我们添加操作tf.print
必须在运行时运行的依赖项c
,我们就可以看到我们想要的输出:
# a is 1 while b is 2
# 3
# a is 3 while b is 1
# 4
Run Code Online (Sandbox Code Playgroud)
最后,tensor.eval()
与 相同sess.run(tensor)
。但是, 的限制tensor.eval()
是您可以运行它来评估单个张量,而tf.Session
可以用于评估多个张量sess.run([tensor1, tensor2])
。如果你问我,我总是会使用sess.run(list_of_tensors)
, 来评估我想要的尽可能多的张量,并打印出它们的值。
归档时间: |
|
查看次数: |
3224 次 |
最近记录: |