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)) 結果以下: