Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tensorflow 如何使用tf.matmul执行有效的稀疏矩阵乘法?_Tensorflow_Sparse Matrix - Fatal编程技术网

Tensorflow 如何使用tf.matmul执行有效的稀疏矩阵乘法?

Tensorflow 如何使用tf.matmul执行有效的稀疏矩阵乘法?,tensorflow,sparse-matrix,Tensorflow,Sparse Matrix,我试图使用tf.matmul()执行稀疏矩阵乘法 然而,推理速度比密集矩阵乘法慢得多 根据tf.sparse_matmul()中的描述: 与在一个平台上使用密集矩阵乘法相比,在稀疏矩阵中使用此乘法的盈亏平衡为30%零值 因此,我用7/8的零值创建稀疏矩阵 这是我的密码: import tensorflow as tf import numpy as np import time a = tf.Variable(np.arange(1000).reshape(250,4) ,dtype=tf.

我试图使用tf.matmul()执行稀疏矩阵乘法

然而,推理速度比密集矩阵乘法慢得多

根据tf.sparse_matmul()中的描述:

  • 与在一个平台上使用密集矩阵乘法相比,在稀疏矩阵中使用此乘法的盈亏平衡为30%零值
因此,我用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))
我将“b_is_sparse=True”设置为执行稀疏矩阵乘法,在我的GeForce GTX 960M上大约需要0.380毫秒

但是,如果我设置“b_is_sparse=False”来执行密集矩阵乘法,则需要大约0.280毫秒

我曾尝试使用tf.sparse\u tensor\u densite\u matmul和tf.embedded\u lookup\u sparse执行稀疏矩阵乘法,但推理速度仍然比密集矩阵乘法慢

我的代码或其他执行稀疏矩阵乘法的方法是否有错误


任何建议都将不胜感激

相对性能取决于许多因素。稀疏乘法可以比密集矩阵的密集乘法快(希望如此),但您也可以说它也可以慢一些

首先,它取决于矩阵的大小

这是两个方阵的乘法结果,一个是随机的,一个是用零填充的,并记录了密集乘法和备用乘法的计算时间


如您所见,即使矩阵完全为零,对于较小的矩阵大小,稀疏乘法也可能比密集乘法慢——事实上,对于大约
120x120
的矩阵,稀疏乘法的速度几乎是密集乘法的三倍。在我的计算机上的这个实验中,稀疏矩阵乘法开始在大约
700x700
的大小上占据主导地位,最终速度快了大约2倍。当然,YMMV取决于您的配置。

看起来有tensorflow开发人员提供的现有基准,但使用的矩阵大小非常小:稀疏的\u tensor\u稠密的\u matmul\u op\u test.py来自