我测试以下代码脚本
import tensorflow as tf
a, b, c = 2, 3, 4
x = tf.Variable(tf.random_normal([a, b, c], mean=0.0, stddev=1.0, dtype=tf.float32))
s = tf.shape(x)
print(s)
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)
print(sess.run(s))
运行代码会得到以下结果
Tensor("Shape:0", shape=(3,), dtype=int32)
[2 3 4]
看起来只有第二个印刷品才能提供可读格式。第一个印刷品真正做了什么或如何理解第一个输出?
答案 0 :(得分:1)
对s = tf.shape(x)
的调用定义了一个符号(但非常简单)的TensorFlow计算,只有在您调用sess.run(s)
时才会执行。
执行print(s)
时,Python将打印TensorFlow对张量s
所知的所有内容,而不会对其进行实际评估。由于它是tf.shape()
op的输出,因此TensorFlow知道它具有类型tf.int32
,并且TensorFlow也可以推断它是长度为3的向量(因为x
是静态已知的是变量定义的三维张量。)
请注意,在许多情况下,您可以使用Variable.get_shape()
方法(类似于其表兄Tensor.get_shape()
)打印特定张量的静态形状,而无需调用张量来获取更多形状信息:
# Print the statically known shape of `x`.
print(x.get_shape())
# ==> "(2, 3, 4)"