【问题标题】:matrix multiplication with sparse output specified by another sparse matrix on tensorflow与稀疏输出的矩阵乘法由张量流上的另一个稀疏矩阵指定
【发布时间】:2025-11-22 22:40:02
【问题描述】:

我想在 TensorFlow 上实现一个矩阵乘法,例如 C = A · B where A ∈ ℝn,kB ∈ ℝ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

提前致谢!

【问题讨论】:

  • @AlexanderMcFarlane 据我了解,具有密集张量的稀疏张量的 matmul 将具有密集输出。目前尚不清楚如何将稀疏张量作为输出。
  • 在我的例子中,AB 都是密集矩阵。
  • 以后你想用C做什么?你想计算tf.sparse_tensor_dense_matmul(C, x)吗?
  • @JonasAdler 我想稍后执行以下操作:C=tf.nn.tanh(C),然后是 C=tf.sparse_softmax(C),然后是 tf.sparse_tensor_dense_matmul(sp_a=C, b=x)

标签: machine-learning tensorflow sparse-matrix matrix-multiplication


【解决方案1】:

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

您可能要问的是“矩阵乘法与稀疏输出”的问题。

阅读第一部分(介绍):

“我们的方法可以看作是矩阵乘积的压缩感知方法,其非标准思想是 AB 的 SKETCH 是在 不显式构造 AB 的情况下计算的”

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

以图 2 为例。

【讨论】:

    最近更新 更多