問題描述:在使用pytorch的過程中,有時會遇到以下報錯:
runtimeerror: expected object of type torch.cuda.doubletensor but found type torch.cuda.floattensor for argument #3 'other'
這種錯誤是由於資料型別不匹配造成的。這種不匹配可能來自pytorch各個層之間,也可能來自於使用dataset和dataloader匯入來自numpy的資料。後者有時更難以發現。
原因分析:如果pytorch的資料**是numpy,要十分注意在numpy中,小數的預設資料型別是np.float
,但np.float
與np.float64
等價;在pytorch中,預設資料型別是torch.float
,但float
與torch.float32
等價。也就是說,如果不加轉換地使用torch.from_numpy
,numpy中的陣列將會被轉換成pytorch中的torch.double
型別。而網路的其他部分很有可能使用的是預設的torch.float32
型別,這就造成了資料型別的不匹配。
解決方法:一般將從numpy的輸入資料型別改為np.float32
型別即可。在輸入資料加後.astype(np.float32)
就可保證兩邊的資料型別統一。
Pytorch之Tensor和Numpy之間的轉換
最重要的區別t.tensor和t.tensor 不論輸入的型別是什麼,t.tensor 都會進行資料拷貝,不會共享記憶體 t.tensor 與numpy共享記憶體,但當numpy的資料型別和tensor的型別不一樣的時候,資料會被複製,不會共享記憶體。可使用t.from numpy 或者t.deta...
pytorch的tensor與numpy陣列共享值
網上的很多部落格說tensor與numpy陣列共享記憶體,這是錯誤的 先給結論 tensor與numpy陣列共享部分記憶體,說共享值更嚴謹,且有條件 看 a torch.ones 2,2 b a.numpy print id a print id b 輸出 3030786996336 3030755...
pytorch學習(一)numpy與torch對比
torch類似於numpy,可以理解為pytorch框架下的numpy,因此很多numpy的運算適用於torch 1 numpy可以轉化為torch,torch也可以轉化為numpy import torch import numpy as np np data np.arange 6 reshap...