gpt4 book ai didi

python - tf.print() vs Python print vs tensor.eval()

转载 作者:行者123 更新时间:2023-12-01 00:39:32 27 4
gpt4 key购买 nike

看来在Tensorflow中,至少有三种方法可以打印出张量的值。我一直在读herethere ,但还是很困惑。

这些作者似乎将不同的用法总结为:

  • Python print :只能打印出张量的某些属性,例如它的形状,因为在计算图之外它只是一个操作。
  • tensor.eval() :不确定它与 tf.print() 的区别
  • tf.print() :可以输出张量的实际值,但必须插入到图中的某个位置并被其他操作使用,否则它将是悬空的并且仍然不会打印。

我的困惑可能还在于我不确定我们可以在 tensorflow 计算图中访问多少Python功能,或者计算图“结束”和Python代码“开始”在哪里。例如

  1. 如果我在构造计算图的两行之间插入 Python 打印,当我调用 sess.run() 时稍后,这条线会被调用吗?
  2. 如果我想在计算图中打印出多个张量值,这些语句应该放在哪里?
  3. tensor.eval() 之间有什么区别和tf.print() ?我应该如何以不同的方式使用它们?

最佳答案

首次构建图形时将调用 native Python print() 语句。看看这个:

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

通过执行此代码块,输出为:

# a is  Tensor("Placeholder:0", dtype=int32)  while b is  Tensor("Placeholder_1:0", dtype=int32)
# 3
# 4

另一方面,让我们看看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}))

因此,根据下面的输出,我们可以看到,如果我们添加每当运行 c 时都必须运行 tf.print 操作的依赖项,我们得到查看我们想要的输出:

# a is  1  while b is  2
# 3
# a is 3 while b is 1
# 4

最后,tensor.eval()sess.run(tensor) 相同。但是,tensor.eval() 的限制是您可以运行它来评估单个张量,而 tf.Session 可用于评估多个张量sess.run([张量1,张量2])。如果你问我,我总是会使用 sess.run(list_of_tensors) 来评估尽可能多的张量,并打印出它们的值。

关于python - tf.print() vs Python print vs tensor.eval(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57469673/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com