如何在张量流中将非常大的稀疏矩阵相乘?

时间:2019-08-28 07:36:47

标签: tensorflow deep-learning sparse-matrix

我有一个形状为[20k,20k]的非常大的稀疏张量input_a和一个形状为[20k,512]的密集张量input_b。 nnz(input_a)约为400k(input_a中有400k非零值)。我想将这两个张量相乘,以获得形状为[20k,512]的输出张量output。如果我使用tf.sparse_tensor_dense_matmul将input_a和input_b相乘,将出现错误:(使用tensorflow版本v1.8)

  

output.shape [1] * nnz(a)> 2 ^ 31“

时无法使用GPU

如果output.shape [1]为20k,这可能是有道理的,因为20k * 400k = 8000000000> 2 ^ 31 =2147483648。但是,我认为在这种情况下output.shape [1]应该为512?

我的代码:

input_a:形状[20k,20k]

input_b:形状[20k,512]

output:形状[20k,512]

output = tf.sparse_tensor_dense_matmul(input_a, input_b)

然后我会收到错误消息。

如果我将input_a转换为密集的张量,然后使用tf.matmul,它可以工作,但是可能会占用大量内存和时间吗?

dense_input_a = tf.sparse_tensor_to_dense(dense_input_a)
output = tf.matmul(dense_input_a, input_b, a_is_sparse = True)

为什么会发生错误?如何有效地将这两个张量相乘?谢谢!

0 个答案:

没有答案