numpy与cuda数据转换方法

1、GPU传入CPU

首先,确认pytorch是GPU版本,然后编写时候传入的量应该为Tensor类型。

import torch
x=torch.Tensor([[2,5],[1,3]])
y=torch.Tensor([[2],[5]])
print('x',x.cuda())
print('y',y.cuda())

x.cuda()实现了将数据拷贝到GPU上,并且显示了设备deice是0号显卡

z=x.mm(y)
print('z',z)

torch.mm是两个矩阵相乘,即两个二维的张量相乘,如下面的例子

mat1 = torch.randn(2,3)
print("mat1=", mat1)

mat2 = torch.randn(3,2)
print("mat2=", mat2)

mat3 = torch.mm(mat1, mat2)
print("mat3=", mat3)

运算后的结果传入到了CPU中。(默认不显示device为CPU).

但也不全是这样,具体可能应该查看一下,如做QR分解:

A=torch.Tensor([[2,5],[1,3]])
print('A cpu',A)
A = A.cuda()
print('A cuda',A)
q, r = torch.qr(A)
print('q',q)
print('q',r)

这个时候q和r在GPU里,如果想传入到CPU中,只需q=q.cpu() r=r.cpu()即可。

2、CPU传入GPU

print('x',x.cuda().cpu())1

用这种方法数据就传送了回来。总结一下, .cuda() 将CPU的数据传送给GPU,而.cpu()将GPU中的数据传送给CPU

3、Cuda转成Numpy

print('x,cuda2numpy:',x.cuda().numpy())

会报错,应该先转换为cpu中再转换为numpy

TypeError: can’t convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.

print('x,cuda2numpy:',x.cuda().cpu().numpy())
import torch
x=torch.Tensor([[2,5],[1,3]])
print('x,tensor:',x)
print('x,cuda:',x.cuda())
print('x,numpy:',x.numpy())
print('x,numpy2tensor:',torch.Tensor(x.numpy()))
print('x,numpy2tensor2:',torch.from_numpy(x.numpy()))
print('x,cuda2numpy:',x.cuda().cpu().numpy())
print (torch.cuda.device_count())

你可能感兴趣的:(python,numpy)