Tensorflow 张量流:稀疏张量密集矩阵比常规矩阵慢

Tensorflow 张量流:稀疏张量密集矩阵比常规矩阵慢,tensorflow,sparse-matrix,Tensorflow,Sparse Matrix,我有两种情况: scenario 1: op: sparse_tensor_dense_matmul A: 1000x1000 sparsity = 90% B: 1000x1000 sparsity = 0% scenario 2: op: matmul A: 1000x1000 sparsity = 0% B: 1000x1000 sparsity = 0% 我知道GPU不能很好地计算稀疏矩阵乘法,但我肯定希望他们至少能像执行非稀疏矩阵乘法一样执行稀疏矩阵乘法。在我的代码中,稀疏张量密集

我有两种情况:

scenario 1:
op: sparse_tensor_dense_matmul
A: 1000x1000 sparsity = 90%
B: 1000x1000 sparsity = 0%

scenario 2:
op: matmul
A: 1000x1000 sparsity = 0%
B: 1000x1000 sparsity = 0%
我知道GPU不能很好地计算稀疏矩阵乘法,但我肯定希望他们至少能像执行非稀疏矩阵乘法一样执行稀疏矩阵乘法。在我的代码中,稀疏张量密集matmul的速度慢了10倍

import tensorflow as tf
import numpy as np
import time
import itertools

rate = 0.1
N = 1000
itrs = 1000

num = int(rate * N * N)

combs = np.array(list(itertools.product(range(N), range(N))))
choices = range(len(combs))
_idxs = np.random.choice(a=choices, size=num, replace=False).tolist()
_idxs = combs[_idxs]
_idxs = _idxs.tolist()
_idxs = sorted(_idxs)

_vals = np.float32(np.random.rand(num))
_y = np.random.uniform(low=-1., high=1., size=(N, N))
_z = np.random.uniform(low=-1., high=1., size=(N, N))
################################################
x = tf.SparseTensor(indices=_idxs, values=_vals, dense_shape=(N, N))
y = tf.Variable(_y, dtype=tf.float32)
z = tf.Variable(_z, dtype=tf.float32)

sparse_dot = tf.sparse_tensor_dense_matmul(x, y)
dot = tf.matmul(z, y)
################################################
sess = tf.InteractiveSession()
tf.global_variables_initializer().run()
tf.local_variables_initializer().run()

start = time.time()
for i in range(itrs):
    [_sparse_dot] = sess.run([sparse_dot], feed_dict={})
total = time.time() - start
print (total)

start = time.time()
for i in range(itrs):
    [_dot] = sess.run([dot], feed_dict={})
total = time.time() - start
print (total)
################################################
25.357680797576904


2.768450260623535

我尝试在Google Colab中执行您的代码,CPU和GPU都作为运行时,但我发现您提到的两个操作的执行时间是相同的。请提供更多信息,以便复制。以下是我的演讲要点。谢谢