我运行了以下代码来计算矩阵的伪逆,但看起来我是否打开GPU没有任何区别。
mat = theano.shared(numpy.eye(300, dtype="float32")+1)
fn = theano.function([], theano.tensor.nlinalg.pinv(mat))
fn()
然后我查看了Theano的theano.tensor.nlinalg.MatrixPinv
源代码,发现它只是在下面的代码中调用了Numpy的numpy.linalg.pinv
(我将省略评论)。
class MatrixPinv(Op):
__props__ = ()
def __init__(self):
pass
def make_node(self, x):
x = as_tensor_variable(x)
assert x.ndim == 2
return Apply(self, [x], [x.type()])
def perform(self, node, inputs, outputs):
(x,) = inputs
(z,) = outputs
z[0] = numpy.linalg.pinv(x).astype(x.dtype)
pinv = MatrixPinv()
我对Numpy的实现方式不太熟悉,它可以在GPU上运行吗? 如果没有,这是否意味着每次我想在Theano中计算矩阵逆时,我都必须从GPU回到CPU?
答案 0 :(得分:3)
请参阅theano文档中的文章Using the GPU。
请注意,我们使用
shared
函数确保输入x存储在图形设备上。
您必须确保数据存储在图形内存中。否则,我想,theano会回到使用numpy例程。
Numpy通常不会在GPU上运行。我不确定是否有可能将其与CudaBLAS联系起来,但我认为这超出了范围。