没有调用run()

时间:2016-10-26 16:28:31

标签: tensorflow

稀疏tensor.shape方法返回一个张量对象,它似乎没有用来提取稀疏张量的实际形状而不需要求助于运行函数。

为了澄清我的意思,首先考虑稀疏张量:

a = tf.SparseTensor(indices = [[0,0,0],[1,2,1]],values = [1.0 + 2j,2.0],shape = [3,4,2])< / p>

a.shape返回:

tf.Tensor'SparseTensor_1 / shape:0'shape =(3,)dtype = int64

这没用。

现在,考虑一个密集的张量:

a = tf.constant(np.random.normal(0.0,1.0,(4,4))。astype(dtype = np.complex128))

a.get_shape()返回: TensorShape([Dimension(4),Dimension(4)])

我可以使用此输出并将其转换为整数列表或元组,而无需调用run()。但是,我不能对稀疏张量做同样的事情,除非我先将稀疏张量转换为密集(这对于复杂的稀疏张量尚未实现)然后调用它的get_shape()方法,但这有点多余,挫败了目的如果输入稀疏张量很复杂,那么首先使用稀疏张量并导致误差。

有没有办法在不调用run()或将其转换为密集张量的情况下获得稀疏张量的形状?

1 个答案:

答案 0 :(得分:1)

tf.SparseTensor实施为引擎盖下的三重密集张量。 SparseTensor的shape只是一个Tensor;如果你想知道它的价值,最好的办法就是用session.run评估它:

print(sess.run(a.shape))

一般来说,Tensorflow不承诺即使对于图形构建时的密集张量也能计算出精确的形状;形状是尽力而为,甚至可能没有固定的价值。因此,即使对于密集的Tensor,您也可能需要使用run来评估Tensor以获得精确的形状。