PyTorch出現錯誤“RuntimeError: Found dtype Double but expected Float”
1 錯誤描述
今天在除錯PyTorch程式碼時出現“RuntimeError: Found dtype Double but expected Float”的錯誤,相關提示資訊如下
File “/home/…/train.py”, line 78, in main
running_loss = trainer.train_one_epoch(epoch, qa=qa)
File “/home/…/model/…py”, line 347, in train_one_epoch
loss.backward()
File “/home/…/software/python/anaconda/anaconda3/envs/conda-general/lib/python3.7/site-packages/torch/tensor.py”, line 221, in backward
torch.autograd.backward(self, gradient, retain_graph, create_graph)
File “/home/…/software/python/anaconda/anaconda3/envs/conda-general/lib/python3.7/site-packages/torch/autograd/init.py”, line 132, in backward
allow_unreachable=True) # allow_unreachable flag
RuntimeError: Found dtype Double but expected Float
可以看到這是一個跟資料型別相關的錯誤;
2 相關資料
感謝網友lcqin111提供的資料——《Pytorch: RuntimeError: expected Double tensor (got Float tensor)》
裡面對這個問題進行了解釋。
3 解決方案
其實這個問題產生的原因就是資料型別不一致,比較solid一點的方法,就是從報錯的地方開始一點一點除錯程式碼,看看參與運算的張量是否存在型別不同的情況,例如:
如果a[FloatTensor]和b[DoubleTensor]是兩個參與運算的張量,且有運算程式碼“loss = criterion(a,b)”,則會引發上面的問題。
所以可以從出錯的程式碼位置一步步進行除錯;
其實,最主要的原因還是張量型別不一致,所以實際上將張量型別統一就可以了,
可以使用程式碼:
torch_tensor = torch_tensor.float()
3.1 小提示——使用double()則會佔用很多視訊記憶體
南溪自己試過用double()進行運算,不過這樣視訊記憶體佔用會增大許多,而很可能出現視訊記憶體爆炸的情況,所以最後還是使用FloatTensor型別;
相關文章
- DBCA建庫出現CHMOD NOT FOUND錯誤
- 執行時報錯RuntimeError: expected device cpu but got device cuda:0ErrordevGo
- PyTorch出現:RuntimeError: An attempt has been made to start a new process...報錯 (已解決)PyTorchError
- 安裝 ESXi 出現錯誤 ERROR 1962: No operating system foundError
- Angular 內容投影出現 No provider for TemplateRef found 錯誤的單步除錯AngularIDE除錯
- python程式碼錯誤RuntimeError: Session is closedPythonErrorSession
- golang expected declaration, found 'IDENT'GolangIDE
- Spring boot ElasticSearch,出現ElasticsearchRepository.refresh()! No property refresh found for type錯誤...Spring BootElasticsearch
- float和double有什麼區別?
- java double、float型別的比較Java型別
- GetDlgItem() 出現錯誤Git
- 出現錯誤 Project ‘org.springframework.boot:spring-boot-starter-parent’ not foundProjectSpringFrameworkboot
- 執行hadoop fs -ls時出現錯誤RuntimeException: core-site.xml not foundHadoopExceptionXML
- Opencv出現detecMultiScale錯誤OpenCV
- xcode6編譯錯誤,提示Expected a typeXCode編譯
- inconsistent datatypes: expected - got CLOB錯誤一例Go
- 每日充電:踩坑expected ‘package‘, found ‘import‘PackageImport
- Double型別精度問題引起的錯誤型別
- C語言中關於float、double、long double精度及數值範圍理解C語言
- 開發中遇到的float double精度問題
- oracle plsql(一)_binary_float_binary_doubleOracleSQL
- 小程式錯誤:Component is not found in path
- MyBatis 錯誤:Invalid bound statement (not found)MyBatis
- python問題:IndentationError:expected an indented block錯誤解決PythonErrorBloC
- Laravel 出現 419 錯誤Laravel
- AS打包出現app:transformClassesAndResourcesWithProguardForRelease錯誤APPORM
- 使用 sudo 命令出現錯誤
- FTP出現426錯誤FTP
- Android:Unexpected lock protocol found in lock file. Expected 3, found 0.AndroidProtocol
- Invalid bound statement (not found)錯誤解決
- Flutter 最常出現的典型錯誤Flutter
- 配置nagios出現的錯誤iOS
- 執行Bex 出現 61704 錯誤
- Servlet訪問WebService出現錯誤ServletWeb
- WebService異常Unexpected wrapper element ... found. Expected ...WebAPP
- 關於MYSQL中FLOAT和DOUBLE型別的儲存MySql型別
- int float double 各型別的最大值最小值型別
- Eclipse 啟動專案錯誤:class not foundEclipse