Col*_*869 3 sparse-matrix tensorflow
我正在尝试使用 tf.matmul() 执行稀疏矩阵乘法。
然而,推理速度比密集矩阵乘法慢得多。
根据 tf.sparse_matmul() 中的描述:
因此,我使用 7/8 零值制作稀疏矩阵。
这是我的代码:
import tensorflow as tf
import numpy as np
import time
a = tf.Variable(np.arange(1000).reshape(250,4) ,dtype=tf.float32) #dense matrix
b = tf.Variable(np.array([0,0,0,0,0,0,0,1],dtype=np.float32).reshape(4,2),dtype=tf.float32) # sparse matrix
c = tf.matmul(a,b,b_is_sparse=True) # do the sparse matrix multiplication
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
num_iteration = 5000
num_burnin = 50
duration = 0
for i in range(num_iteration+num_burnin):
startTime = time.time()
result = sess.run(c)
endTime = time.time()
if i > num_burnin :
duration+= endTime-startTime
print(" Average Inference Time = %.3f ms"%(duration*1000/num_iteration))
Run Code Online (Sandbox Code Playgroud)
我设置了“b_is_sparse=True”来进行稀疏矩阵乘法,在我的 GeForce GTX 960M 上它需要大约 0.380 毫秒。
但是,如果我设置“b_is_sparse=False”来进行密集矩阵乘法,则大约需要 0.280 毫秒。
我曾尝试使用 tf.sparse_tensor_dense_matmul 和 tf.embedding_lookup_sparse 来执行稀疏矩阵乘法,但推理速度仍然比密集矩阵乘法慢。
我的代码或执行稀疏矩阵乘法的其他方式有问题吗?
任何建议将不胜感激!
相对性能取决于许多因素。稀疏乘法可以比使用密集矩阵的密集乘法更快(希望如此),但你是对的,它也可能更慢。
一方面,这取决于矩阵的大小。
这里是两个方阵相乘的结果,一个是随机的,一个是用零填充的,并记录了密集乘法和备用乘法的计算时间。
如您所见,即使矩阵完全为零,对于较小的矩阵大小,稀疏乘法也可能比密集乘法慢——实际上,对于约 的矩阵,它几乎慢了三倍120x120。在我的计算机上的这个实验中,稀疏矩阵乘法开始接管700x700大约 2 倍的大小。当然 YMMV 取决于您的配置。
| 归档时间: |
|
| 查看次数: |
2036 次 |
| 最近记录: |