張量與數組運算報錯(Use Tensor.cpu() to copy the tensor to host memory first;RuntimeError: Expected all tensor

1.張量與數組運算,張量必須在cpu上,產生結果爲cpu上的張量,可繼續與數組運算(張量必須在gpu上) 2.張量與張量運算,cpu上的張量與gpu上的張量是沒法運行的,必須在相同的gpu上或cpu上,猜測不一樣型號的gpu因該也不行 報錯代碼 TypeError: can't convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first. 報錯代碼:RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu!數組

結論:1.張量與數組運算,張量必須在cpu上,產生結果爲cpu上的張量,可繼續與數組運算(張量必須在gpu上)ide

   2.張量與張量運算,cpu上的張量與gpu上的張量是沒法運行的,必須在相同的gpu上或cpu上,猜測不一樣型號的gpu因該也不行。orm

 

 

 

一.張量與數組運算,前提張量必須在cpu上(若是張量在gpu上,則會報錯(我認爲數組自己在cpu上,所以2個操做在cpu上,就能夠默認運行)),運算結果將會轉到cpu上,具體操做以下:blog

注:報錯代碼 TypeError: can't convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.it

代碼以下:ast

b=np.array(9) # numpy 數組
a = torch.ones((2, 2)) # 張量
print('a in device :',a.device)
c=a*b # 數組與張量運算,其中張量在cpu上
print('c in device:{};value{}'.format(c.device,c))



結果如圖:

 

 報錯結果:form

 

 

繼續探討張量與數組運算:class

b=np.array(9) # numpy 數組
a = torch.ones((2,2)) # 張量
print('a in device :',a.device)
c=a*b # 數組與張量運算,其中張量在cpu上
print('c in device:{};value:{}'.format(c.device,c))
d=np.array(8)
e=c*d # 繼續驗證數組與產生的張量運算
print('e in device:{};value:{}'.format(e.device, e))

結果如圖:numpy

 

 二.張量與張量運算,若在不一樣設備會報錯,RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu!,結論很清楚,而具體過程以下:im

  代碼以下:

b=torch.ones((2,2)) # numpy 數組
b=b.cpu()
a = torch.ones((2,2)) # 張量
a=a.cuda()
print('a in device :{};b in device :{}'.format(a.device,b.device))
c=a*b # 數組與張量運算,其中張量在cpu上
print('c in device:{};value:{}'.format(c.device,c))

結果以下:

相關文章
相關標籤/搜索