我想在 TensorFlow 上实现矩阵乘法,例如 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
。
提前致谢!
最佳答案
我在这里找到了部分答案(不完整,因为我没有完全理解你的目标):Compressed matrix multiplication .
您可能正在询问称为“稀疏输出的矩阵乘法”的问题。
阅读第一部分(简介):
"Our method can be seen as a compressed sensing method for the matrix product, with the nonstandard idea that the SKETCH of AB is computed WITHOUT EXPLICITLY CONSTRUCTING AB"
在某些假设下(输出矩阵的稀疏性和草图数量)并使用错误校正代码,无需将 A 和 B 相乘即可获得初始乘积的最大条目。
请参见图 2 的示例。
关于machine-learning - 与 tensorflow 上另一个稀疏矩阵指定的稀疏输出进行矩阵乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45617709/