python – TensorFlow tf.sparse_tensor_dense_matmul

python – TensorFlow tf.sparse_tensor_dense_matmul,第1张

概述我运行了一个小实验来对tf.sparse_tensor_dense_matmul *** 作进行基准测试.不幸的是,我对结果感到惊讶. 我正在运行稀疏矩阵,密集向量乘法,并且变化 >稀疏矩阵的列数(减少) >密集向量的行数(减少) >稀疏矩阵的稀疏性(增加) 在增加每次运行的稀疏性时,我会减少列数.这意味着非零值(nnz)的数量始终保持不变(每行100个). 当测量计算matml *** 作所需的时间时,我预计它 我运行了一个小实验来对tf.sparse_tensor_dense_matmul *** 作进行基准测试.不幸的是,我对结果感到惊讶.

我正在运行稀疏矩阵,密集向量乘法,并且变化

>稀疏矩阵的列数(减少)
>密集向量的行数(减少)
>稀疏矩阵的稀疏性(增加)

在增加每次运行的稀疏性时,我会减少列数.这意味着非零值(nnz)的数量始终保持不变(每行100个).

当测量计算matml *** 作所需的时间时,我预计它将保持不变(因为输出大小和nnz不同).

我所看到的是以下内容:

我查看了C代码,看看我是否能发现结果的任何原因.虽然,考虑到C代码,我希望每次运行的时间相同.如果我理解正确的代码,它会循环遍历稀疏矩阵的所有nnz值(https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/kernels/sparse_tensor_dense_matmul_op.cc#L239).对于每个nnz值,它循环遍历第二个密集矩阵的所有列(在我的情况下,它只是一列,因为它是一个向量)(https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/kernels/sparse_tensor_dense_matmul_op.cc#L245).

我可以想象第二个矩阵/向量的行数影响性能的唯一点是https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/kernels/sparse_tensor_dense_matmul_op.cc#L246,如果它遍历第二个矩阵/向量的所有行,则“maybe_adjoint_b”函数到达当前需要的行.

[令人烦恼的是,对于“maybe_adjoint_b”调用,它是通过作为行索引传递的变量“k”来调用的.虽然,我认为“m”是行索引,“k”是稀疏矩阵的列索引.

问题:为什么我会为matmul *** 作获得不同的执行时间,即使nnz和输出大小始终相同?

解决方法 我实际上认为这不是TensorFlow的问题,而是第一种情况下输入向量的8MB输入不适合L2内存.在所有其他情况下,矢量<= 800kb并且适合L2存储器. 总结

以上是内存溢出为你收集整理的python – TensorFlow tf.sparse_tensor_dense_matmul全部内容,希望文章能够帮你解决python – TensorFlow tf.sparse_tensor_dense_matmul所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1197699.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存