Machine learning 由tensorflow上的另一个稀疏矩阵指定的稀疏输出的矩阵乘法

Machine learning 由tensorflow上的另一个稀疏矩阵指定的稀疏输出的矩阵乘法,machine-learning,tensorflow,sparse-matrix,matrix-multiplication,Machine Learning,Tensorflow,Sparse Matrix,Matrix Multiplication,我想在张量流上实现一个矩阵乘法,比如C=a·B,其中a∈ ℝn、 k和B∈ ℝk、 n。在我的例子中,n可能很大,但k通常很小(例如,低秩或潜在嵌入) 你知道稠密矩阵C∈ ℝn、 n存储在RAM中非常昂贵。然而,在C中我只想保留稀疏的条目。也就是说,通过定义另一个稀疏矩阵D∈ ℝn、 n,我真正关心的是那些索引[I,j]在D中有值的值。D中的非空值应仅为1 因此,与其做这样的事情: tmp = tf.matmul(A,B) C = tf.SparseTensor(D.indices, tf.ga

我想在张量流上实现一个矩阵乘法,比如C=a·B,其中a∈ ℝn、 k和B∈ ℝk、 n。在我的例子中,n可能很大,但k通常很小(例如,低秩或潜在嵌入)

你知道稠密矩阵C∈ ℝn、 n存储在RAM中非常昂贵。然而,在C中我只想保留稀疏的条目。也就是说,通过定义另一个稀疏矩阵D∈ ℝn、 n,我真正关心的是那些索引
[I,j]
在D中有值的值。D中的非空值应仅为
1

因此,与其做这样的事情:

tmp = tf.matmul(A,B)
C = tf.SparseTensor(D.indices, tf.gather_nd(tmp, D.indices)*D.values, D.dense_shape)
我想避免显式计算上面的稠密张量
tmp

提前谢谢

我在这里找到了一个部分(不完整,因为我不完全理解您的目标)答案:

您可能在问一个称为“稀疏输出的矩阵乘法”的问题

阅读第一节(导言):

“我们的方法可以看作是矩阵乘积的压缩传感方法,其非标准思想是计算AB的草图,而不显式构造AB”

在某些假设(输出矩阵稀疏和草图数量)下,使用纠错码可以在不乘以A和B的情况下获得初始乘积的最大条目

请看图2以获取一个示例。

我在这里找到了一个部分(不完整,因为我不完全理解您的目标)答案:

您可能在问一个称为“稀疏输出的矩阵乘法”的问题

阅读第一节(导言):

“我们的方法可以看作是矩阵乘积的压缩传感方法,其非标准思想是计算AB的草图,而不显式构造AB”

在某些假设(输出矩阵稀疏和草图数量)下,使用纠错码可以在不乘以A和B的情况下获得初始乘积的最大条目


查看图2的示例。

可能重复@AlexanderMcFarlane据我所知,稀疏张量与稠密张量的matmul将具有稠密输出。不清楚如何将稀疏张量作为输出。在我的例子中,a和B都是稠密矩阵。您稍后想用
C
做什么?你想计算
tf.sparse\u tensor\u densite\u matmul(C,x)
?@JonasAdler我想稍后做以下事情:
C=tf.nn.tanh(C)
,然后
C=tf.sparse\u softmax(C)
,然后
tf.sparse\u tensor\u densite\u matmul(sp\u a=C,b=x)
据我所知,@AlexanderMcFarlane的可能重复,稀疏张量与稠密张量的矩阵将具有稠密输出。不清楚如何将稀疏张量作为输出。在我的例子中,a和B都是稠密矩阵。您稍后想用
C
做什么?你想计算
tf.sparse\u tensor\u densite\u matmul(C,x)
?@JonasAdler我想稍后做以下事情:
C=tf.nn.tanh(C)
,然后
C=tf.sparse\u softmax(C)
,然后
tf.sparse\u tensor\u densite\u matmul(sp\u a=C,b=x)