当前位置:   article > 正文

numpy与cuda数据转换方法_tensor cuda 转为numpy

tensor cuda 转为numpy

1、GPU传入CPU

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

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

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

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

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

  1. mat1 = torch.randn(2,3)
  2. print("mat1=", mat1)
  3. mat2 = torch.randn(3,2)
  4. print("mat2=", mat2)
  5. mat3 = torch.mm(mat1, mat2)
  6. print("mat3=", mat3)

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

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

  1. A=torch.Tensor([[2,5],[1,3]])
  2. print('A cpu',A)
  3. A = A.cuda()
  4. print('A cuda',A)
  5. q, r = torch.qr(A)
  6. print('q',q)
  7. 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())
  1. import torch
  2. x=torch.Tensor([[2,5],[1,3]])
  3. print('x,tensor:',x)
  4. print('x,cuda:',x.cuda())
  5. print('x,numpy:',x.numpy())
  6. print('x,numpy2tensor:',torch.Tensor(x.numpy()))
  7. print('x,numpy2tensor2:',torch.from_numpy(x.numpy()))
  8. print('x,cuda2numpy:',x.cuda().cpu().numpy())
  9. print (torch.cuda.device_count())
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/851469
推荐阅读
相关标签
  

闽ICP备14008679号