python矩阵大小命令,python编写矩阵乘法函数
我在开发一个小型的神经网络,它的参数需要大量的优化,所以需要大量的处理时间。我曾经用cProfile分析过我的脚本,80%的处理器时间是NumPy点函数,剩下的是用numpy.linalg.solve函数的矩阵求逆。
我目前版本的numpy用的是blas,或者看起来是这样的,因为numpy.core._dotblas.dot显示为占总处理时间80%的函数。
因为它是我的神经网络的核心,而且我要经常运行它,所以任何微小的速度增益都可以让我在无数次重复的参数优化中节省很多时间。
更准确:矩阵乘法是在100*100到500*500的最小矩阵上进行的。我有一台12核计算机,到目前为止我使用它们并行运行不同的神经网络参数优化,但也许矩阵乘法可以并行进行?
感谢您的宝贵时间!
回答:
我花了几天时间测试和安装卸载库。以下是我的测试结果:
默认情况下,在我的Ubuntu版本(12.04)和respository安装的Numpy版本上,BLAS库是ATLAS库。我做过一些测试,具体反映了我感兴趣的计算的改进,所以这些结果不能解释为最终答案。这些计算包括55,000次迭代循环中的矩阵乘法(点乘),500*500和1,000 * 1,000个矩阵。我用的是惠普Z800工作站,至强X5675@3.07GHZ,12核。所有的结果(百分比)都是描述的条件和参考之间的比较(这里是打包的图集库)。Scipy.sparse模块:不知道设置的对不对,使用10%的稀疏度,从OpenBLAS和MKL的1500*1500矩阵开始,使用这个模块就变得非常有用了。如果你有如何正确使用它们的建议,我很感兴趣!
有了OpenBlas,500*500矩阵速度提升33%,1000*1000矩阵速度提升160%。但是对于OpenBLAS来说,scipy.sparse模块的性能其实不是更好,而是更差。
这里最大的赢家是MKL图书馆。利用原图集库中的1000*1000矩阵,加速率提升至230%!对于一个500*500的矩阵,加速比较适中(100%),但还是很不错的。另外,使用OpenMP进行编译,矩阵乘法可以在我的12处理器上运行。在这里,它的速度是使用MKL库的处理器的两倍。但这是对处理能力的浪费,用多个处理模块并行运行脚本/矩阵乘法要高效得多。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。