machine-learning - 与 tensorflow 上另一个稀疏矩阵指定的稀疏输出进行矩阵乘法

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

我想在 TensorFlow 上实现矩阵乘法,例如 C = A · B 其中 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

提前致谢!

最佳答案

我在这里找到了部分答案(不完整,因为我没有完全理解你的目标):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/

相关文章:

machine-learning - 词性标注器和词 block 划分器

python - 神经网络对具有不同特征的不同实例做出相同的预测

java - 如何使用 svm 创建用于文本分类的 vector 空间

matlab - 如何在 MATLAB 中查找集合的中心点

tensorflow - word2vec 教程示例是否意味着潜在的次优实现?

python - Tensorflow 无法分配设备进行操作

python - 使用python将邻接列表转换为稀疏邻接矩阵

c - C 中的稀疏矩阵转换

c++ - 将特征矩阵转换为三元组形式 C++

java - 如何在 Tensorflow Java API 中设置 session 配置?