Pytorch和Numpy中預設資料型別的區別

2021-09-02 14:15:43 字數 821 閱讀 9667

問題描述:在使用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.floatnp.float64等價;在pytorch中,預設資料型別是torch.float,但floattorch.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...