2017-08-29 43 views
0

当A是tf.SparseTensor且b是tf.Variable时,如何在张量流中实现以下内容?SparseTensor * Vector

A = np.arange(5**2).reshape((5,5)) 
b = np.array([1.0, 2.0, 0.0, 0.0, 1.0]) 
C = A * b 

如果我尝试相同的记法,我得到InvalidArgumentError:提供的索引超出界限w.r.t.密集的一面与广播形状。

回答

1

*作品SparseTensor还有,你的问题似乎是关系到SparseTensor本身,你可能已经提供了超出你给它的形状的范围的指标,考虑这个例子:

A_t = tf.SparseTensor(indices=[[0,6],[4,4]], values=[3.2,5.1], dense_shape=(5,5)) 

通知列索引6比指定的形状应该有最大的5列更大,这给你已经证明了同样的错误:

b = np.array([1.0, 2.0, 0.0, 0.0, 1.0]) 

B_t = tf.Variable(b, dtype=tf.float32) 
with tf.Session() as sess: 
    sess.run(tf.global_variables_initializer()) 
    print(sess.run(A_t * B_t)) 

InvalidArgumentError (see above for traceback): Provided indices are out-of-bounds w.r.t. dense side with broadcasted shape


这里是一个工作示例:

A_t = tf.SparseTensor(indices=[[0,3],[4,4]], values=[3.2,5.1], dense_shape=(5,5)) 

b = np.array([1.0, 2.0, 0.0, 0.0, 1.0]) 
B_t = tf.Variable(b, dtype=tf.float32) 


with tf.Session() as sess: 
    sess.run(tf.global_variables_initializer()) 
    print(sess.run(A_t * B_t)) 
# SparseTensorValue(indices=array([[0, 3], 
#  [4, 4]], dtype=int64), values=array([ 0.  , 5.0999999], dtype=float32), dense_shape=array([5, 5], dtype=int64))