与numpy和cudam在矩阵乘法中有很大不同的结果

2024-09-28 19:09:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着用numpy和cudamat做同样的矩阵乘法。在

结果完全不同。在

我做错什么了?在

我用的是:

  • Ubuntu 14.04版
  • cuda 7.0-28
  • 英伟达346.46
  • 数字1.9.2
  • Python 2.7.10
  • Anaconda 2.2.0(64位)
  • cudamat(最新版本,2015年6月26日)
  • 英伟达750Ti

代码如下:

import numpy as np
import cudamat as cm
cm.init()

...

def distance(self, X):
      gpu_W = cm.CUDAMatrix(self.W)
      gpu_X = cm.CUDAMatrix(X)
      gpu_X2 = cm.pow(gpu_X, 2).sum(axis=1)
      gpu_W2 = cm.pow(gpu_W, 2).sum(axis=1)
      prodWX = cm.dot(gpu_W, gpu_X.T)
      prodWX = prodWX.mult((-2))

      W=self.W
      prodWXgpu=prodWX.asarray()
      prodWXcpu=-2*np.dot(W, X.T)

cm.shutdown()

结果是:

enter image description here

两者都是二维数组。它们的形状是:

W(14,2) X(10000,2)

它意味着每个细胞有两次乘法和一次加法。 所以这不应该是由于累积误差

提前谢谢


Tags: importselfnumpygpuasnpcmdot
1条回答
网友
1楼 · 发布于 2024-09-28 19:09:11

我发现了问题:厘米功率正在修改作为参数接收的矩阵。在

为了解决这个问题,我改变了:

gpu_X2 = cm.pow(gpu_X, 2).sum(axis=1)
gpu_W2 = cm.pow(gpu_W, 2).sum(axis=1)

签署人:

^{pr2}$

相关问题 更多 >