我有一个形状为[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)
为什么会发生错误?如何有效地将这两个张量相乘?谢谢!