【问题标题】:SparseTensor * Vector稀疏张量 * 向量
【发布时间】:2017-08-29 20:58:49
【问题描述】:

当 A 是 tf.SparseTensor 而 b 是 tf.Variable 时,如何在 tensorflow 中实现以下功能?

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: Provided indices are out-of-bounds w.r.t。密集的一面有广播的形状。

【问题讨论】:

    标签: tensorflow sparse-matrix


    【解决方案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(参见上面的回溯):提供的索引是 w.r.t. 越界具有广播形状的密集面


    这是一个工作示例:

    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))
    

    【讨论】:

      猜你喜欢
      • 2012-01-03
      • 1970-01-01
      • 2018-03-20
      • 1970-01-01
      • 2017-03-26
      • 1970-01-01
      • 2015-10-09
      • 1970-01-01
      • 2019-01-27
      相关资源
      最近更新 更多