我试图理解张量流中的tf.rank函数。从文档here,我理解等级应该返回张量中不同元素的数量。
这里x和权重是2个不同的2 * 2张量,每个张量有4个不同的元素。但是,rank()函数输出是:
Tensor(“Rank:0”,shape =(),dtype = int32)Tensor(“Rank_1:0”,shape =(), D型= INT32)
另外,对于张量x,我使用tf.constant()和dtype = float将ndarray转换为float32张量,但rank()仍然输出为int32。
g = tf.Graph()
with g.as_default():
weights = tf.Variable(tf.truncated_normal([2,2]))
x = np.asarray([[1 , 2], [3 , 4]])
x = tf.constant(x, dtype = tf.float32)
y = tf.matmul(weights, x)
print (tf.rank(x), tf.rank(weights))
with tf.Session(graph = g) as s:
tf.initialize_all_variables().run()
print (s.run(weights), s.run(x))
print (s.run(y))
我应该如何解释输出。
答案 0 :(得分:3)
首先,tf.rank
返回张量的维度,而不是元素的数量。例如,tf.rank
的输出要求2x2矩阵为2.
要打印张量的等级,请创建一个合适的节点,例如rank = tf.rank(x)
,然后使用Session.run()
评估此节点,就像您对权重和x所做的那样。执行print (tf.rank(x), tf.rank(weights))
期望打印出张量的描述,因为tf.rank(x), tf.rank(weights)
是图的节点,而不是具有定义值的变量。