2017-08-29 48 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))