首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与numpy和cudamat在矩阵乘法中有很大不同的结果

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

Stack Overflow用户
提问于 2015-06-28 16:41:39
回答 1查看 385关注 0票数 1

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

结果完全不同。

我做错了什么?

我在用:

  • Ubuntu 14.04
  • 库达7.0-28
  • nvidia 346.46
  • 矮胖1.9.2
  • Python 2.7.10
  • Anaconda 2.2.0 (64位)
  • cudamat (最迟于2015年6月26日发布)
  • Nvidia 750

这是密码:

代码语言:javascript
复制
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()

研究结果如下:

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

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

它意味着每个细胞有两个增殖和一个加法。所以这不应该是因为累积误差

提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-28 18:31:29

我发现了一个问题: cm.pow正在修改作为参数的矩阵。

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

代码语言:javascript
复制
gpu_X2 = cm.pow(gpu_X, 2).sum(axis=1)
gpu_W2 = cm.pow(gpu_W, 2).sum(axis=1)

出自:

代码语言:javascript
复制
gpu_X2 = cm.empty (X.shape)
gpu_W2 = cm.empty (W.shape)

cm.pow(gpu_X, 2, target=gpu_X2)
gpu_X2 = gpu_X2.sum(axis=1)
cm.pow(gpu_W, 2, target=gpu_W2)
gpu_W2 = gpu_W2.sum(axis=1)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31102197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档