【发布时间】:2025-11-22 22:40:02
【问题描述】:
我想在 TensorFlow 上实现一个矩阵乘法,例如 C = A · B where 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。
提前致谢!
【问题讨论】:
-
@AlexanderMcFarlane 据我了解,具有密集张量的稀疏张量的 matmul 将具有密集输出。目前尚不清楚如何将稀疏张量作为输出。
-
在我的例子中,A 和 B 都是密集矩阵。
-
以后你想用
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