稀疏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()或将其转换为密集张量的情况下获得稀疏张量的形状?
答案 0 :(得分:1)
tf.SparseTensor
实施为引擎盖下的三重密集张量。 SparseTensor的shape
只是一个Tensor;如果你想知道它的价值,最好的办法就是用session.run
评估它:
print(sess.run(a.shape))
一般来说,Tensorflow不承诺即使对于图形构建时的密集张量也能计算出精确的形状;形状是尽力而为,甚至可能没有固定的价值。因此,即使对于密集的Tensor,您也可能需要使用run
来评估Tensor以获得精确的形状。