我试着用numpy和cudamat做同样的矩阵乘法。
结果完全不同。
我做错了什么?
我在用:
这是密码:
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)
它意味着每个细胞有两个增殖和一个加法。所以这不应该是因为累积误差
提前感谢
发布于 2015-06-28 18:31:29
我发现了一个问题: cm.pow正在修改作为参数的矩阵。
为了解决这个问题,我改变了:
gpu_X2 = cm.pow(gpu_X, 2).sum(axis=1)
gpu_W2 = cm.pow(gpu_W, 2).sum(axis=1)出自:
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)https://stackoverflow.com/questions/31102197
复制相似问题