RuntimeError: Expected to have finished reduction in the prior iteration before starting a new one.

RuntimeError: Expected to have finished reduction in the prior iteration before starting a new one.

報錯信息

報錯信息:

RuntimeError: Expected to have finished reduction in the prior iteration before starting a new one. This error indicates that your module has parameters that were not used in producing loss. You can enable unused parameter detection by (1) passing the keyword argument find_unused_parameters=True to torch.nn.parallel.DistributedDataParallel; (2) making sure all forward function outputs participate in calculating loss. If you already have done the above two steps, then the distributed data parallel module wasn’t able to locate the output tensors in the return value of your module’s forward function. Please include the loss function and the structure of the return value of forward of your module when reporting this issue (e.g. list, dict, iterable).

遇到這個報錯的原因可能有很多,設置torch.nn.parallel.DistributedDataParallel的參數find_unused_parameters=True之類的方法就不提了,報錯信息中給的很清楚,看不懂的話google翻譯一下即可。

運行時錯誤:預計在開始新迭代之前已完成前一次迭代的減少。此錯誤表明您的模塊具有未用于產生損耗的參數。您可以通過 (1) 將關鍵字參數 find_unused_parameters=True 傳遞給 torch.nn.parallel.DistributedDataParallel 來啟用未使用的參數檢測; (2) 確保所有 forward 函數輸出都參與計算損失。如果您已經完成了上述兩個步驟,那么分布式數據并行模塊無法在模塊的 forward 函數的返回值中定位輸出張量。報告此問題時,請包括損失函數和模塊 forward 返回值的結構(例如 list、dict、iterable)。

如果改個參數能夠就能夠解決你的問題的話,你也不會找到這篇博客了^^。

解決方法(之一)

這里其實報錯的最后一句值得注意:

如果您已經完成了上述兩個步驟,那么分布式數據并行模塊無法在模塊的 forward 函數的返回值中定位輸出張量。報告此問題時,請包括損失函數和模塊 forward 返回值的結構(例如 list、dict、iterable)。

但是第一次遇到這個問題只看官方的提示信息可能還是云里霧里,這里筆者將自己的理解和解決過程分享出來。

說的簡單點,其實就一句話:確保你的所有的forward的函數的所有輸出都被用于計算損失函數了

注意,不僅僅是你的模型的forward函數的輸出,可能你的損失函數也是通過forward函數來計算的。也就是說,所有繼承自nn.Module的模塊(不只是模型本身)的forward函數的所有輸出都要參與損失函數的計算

筆者本身遇到的問題就是,在多任務學習中,損失函數是通過一個整個繼承自nn.Module的模塊來計算的,但是在forward返回的loss中少加了一個任務的loss,導致這個報錯。


class multi_task_loss(nn.Module):def __init__(self, device, batch_size):super().__init__()self.ce_loss_func = nn.CrossEntropyLoss()self.l1_loss_func = nn.L1Loss()self.contra_loss_func = ContrastiveLoss(batch_size, device)def forward(self, rot_p, rot_t, pert_p, pert_t, emb_o, emb_h, emb_p,original_imgs, rect_imgs):rot_loss = self.ce_loss_func(rot_p, rot_t)pert_loss = self.ce_loss_func(pert_p, pert_t)contra_loss = self.contra_loss_func(emb_o, emb_h) \+ self.contra_loss_func(emb_o, emb_p) \+ self.contra_loss_func(emb_p, emb_h)rect_loss = self.l1_loss_func(original_imgs, rect_imgs)# tol_loss = rot_loss + pert_loss + rect_loss 				# 少加了一個loss,但是所有loss都返回了tol_loss = rot_loss + pert_loss + contra_loss + rect_loss 		# 修改為此行后正常return tol_loss, (rot_loss, pert_loss, contra_loss, rect_loss)

讀者可以檢查一下自己整個的計算過程中(不只是模型本身),是否所有的forward的函數的所有輸出都被用于計算損失函數了。

Ref:

https://discuss.pytorch.org/t/need-help-runtimeerror-expected-to-have-finished-reduction-in-the-prior-iteration-before-starting-a-new-one/119247

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532771.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532771.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532771.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

android訪問重定向地址,如何從android中重定向url加載圖像(示例代碼)

嗨,我正面臨這個問題我從RESTCall獲取了一個URL網址是http://hck.re/kWWxUI但是當我在瀏覽器中檢查時,它會重定向到https://s3-ap-southeast-1.amazonaws.com/he-public-data/afreen2ac5a33.jpg如何將此圖像加載到我的imageView中我已經知道如何將畢加索…

Linux中的awk、sed、grep及正則表達式詳解

Linux中的awk、sed、grep及正則表達式詳解 簡介 awk、sed和grep是Linux中文本操作的三大利器。 其中awk適用于取列,sed適用于取行,grep適用于過濾。 正則表達式 首先我們來介紹一下正則表達式,正則表達式(regular expression)描述了一種…

android聚焦時如何給控件加邊框,edittext設置獲得焦點時的邊框顏色

第一步:為了更好的比較,準備兩個一模一樣的EditText(當Activity啟動時,焦點會在第一個EditText上,如果你不希望這樣只需要寫一個高度和寬帶為0的EditText即可避免,這里就不這么做了),代碼如下:a…

gcc參數 -i, -L, -l, -include

gcc參數 -i, -L, -l, -include -i,-L,-l,-include -l和-L -l參數就是用來指定程序要鏈接的庫,-l參數緊接著就是庫名,那么庫名跟真正的庫文件名有什么關系呢?就拿數學庫來說,他的庫名是m&…

xargs 命令教程

xargs 命令教程 轉自:http://www.ruanyifeng.com/blog/2019/08/xargs-tutorial.html 作者: 阮一峰 日期: 2019年8月 8日 xargs是 Unix 系統的一個很有用的命令,但是常常被忽視,很多人不了解它的用法。 本文介紹如…

android strictmode有什么作用,Android 性能優化 之 StrictMode

8種機械鍵盤軸體對比本人程序員,要買一個寫代碼的鍵盤,請問紅軸和茶軸怎么選?StrictMode概述StrictMode 是用來檢測程序中違例情況的開發者工具。使用StrictMode,系統檢測出主線程違例的情況會做出相應的反應,如日志打…

curl 的用法指南

curl 的用法指南 轉自:http://www.ruanyifeng.com/blog/2019/09/curl-reference.html 作者: 阮一峰 日期: 2019年9月 5日 簡介 curl 是常用的命令行工具,用來請求 Web 服務器。它的名字就是客戶端(client&#xf…

怎么在html顯示已登錄狀態,jQuery Ajax 實現在html頁面實時顯示用戶登錄狀態

當網站是全靜態的html頁面時,而又希望網站會員在登錄之后并在所有頁面頭部顯示登錄狀態,如用戶名等,如果未登錄就是未登錄狀態,下面給大家來分享實現的方法。一、在html靜態頁面中加入div,并指定ID如:二、新…

互斥鎖、條件變量、信號量淺析

互斥鎖、條件變量、信號量淺析 互斥鎖與條件變量 條件變量是為了保證同步 條件變量用在多線程多任務同步的,一個線程完成了某一個動作就通過條件變量告訴別的線程,別的線程再進行某些動作(大家都在semtake的時候,就阻塞在哪里&a…

xpwifi熱點設置android,教你在XP電腦中開啟設置WiFi熱點使用的步驟

對于系統中網絡的連接問題是最重要的,那在處理不同的錯誤的情況中,對于無線網絡的設置也就是我們說的WiFi的使用也是會遇到問題的,那在操作的時候對于電腦中是怎么實現設置WiFi熱點的的,對于這個問題今天小編就來跟大家分享一下教…

C/C++ 指針詳解

指針詳解 參考視頻:https://www.bilibili.com/video/BV1bo4y1Z7xf/,感謝Bilibilifengmuzi2003的搬運翻譯及后續勘誤,也感謝已故原作者Harsha Suryanarayana的講解,RIP。 學習完之后,回看找特定的知識點,善…

android雙聯動列表,Android Fragment實現列表和內容聯動

在平板上經常能看到這種的情況:左邊是一個列表,右邊是列表項對應的內容,當點擊某一個列表時,右邊內容區也會隨之改變。下面使用fragment簡單的demo:思路:在mainactivity定義一個回調接口,并在列…

linux /proc 詳解

linux /proc 詳解 本文整理了一下 linux /proc下的幾個常用的目錄和文件,可供查閱,之后在學習工作中有別的用到的話會再補充。 /proc 簡介 Linux系統上的/proc目錄是一種文件系統,即proc文件系統。與其它常見的文件系統不同的是&#xff0…

android模擬器太卡,安卓模擬器安裝之后太卡怎么解決

用安卓模擬器玩游戲原理就是在電腦上安裝了一部手機,如果你的電腦配置不是非常高,能不卡頓嗎?遇到卡頓怎么解決?1、安裝最新版本的顯卡驅動。逍遙模擬器對于顯卡的性能要求很高,因此升級至最新版本的顯卡驅動,是確保逍遙模擬器流…

編程環境中Runtime(運行時)的三個含義

編程環境中Runtime(運行時)的三個含義 轉自:https://www.zhihu.com/question/20607178 知乎答主doodlewind 三個含義 實際上編程語境中的 runtime 至少有三個含義,分別是: 指「程序運行的時候」,即程序…

非常不錯的一款html5【404頁面】,不含js腳本可以左右擺動,原生JavaScript實現日歷功能代碼實例(無引用Jq)...

這篇文章主要介紹了原生JavaScript實現日歷功能代碼實例(無引用Jq),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下成品顯示,可左右切換月份html 代碼移動端日歷日一二三四五六css代碼*{margin: 0;pa…

12 [虛擬化] 進程抽象;fork,execve,exit

12 [虛擬化] 進程抽象;fork,execve,exit 南京大學操作系統課蔣炎巖老師網絡課程筆記。 視頻:https://www.bilibili.com/video/BV1N741177F5?p12 講義:http://jyywiki.cn/OS/2021/slides/8.slides#/ 本講概述 回到“…

計算機應用與基礎實踐怎么考,自考計算機基礎應用科目筆試和實踐性考試怎么考...

自考計算機基礎應用科目筆試和實踐性考試怎么考? 報考自考的考生有些專業的考生會在自己的課程科目中發現計算機基礎應用不僅有理論知識考試還有實踐性考試,那么自考計算機基礎應用科目的筆試和實踐性考試怎么考?自考計算機基礎應用科目筆試怎…

14 [虛擬化] 虛存抽象;Linux進程的地址空間

14 [虛擬化] 虛存抽象;Linux進程的地址空間 南京大學操作系統課蔣炎巖老師網絡課程筆記。 視頻:https://www.bilibili.com/video/BV1N741177F5?p14 講義:http://jyywiki.cn/OS/2021/slides/10.slides#/ 本講概述 程序 狀態機;…

瀏覽器是指在用戶計算機上,自考《網頁設計與制作》測試題及答案

自考《網頁設計與制作》測試題及答案學習是一個不斷積累的過程,為幫助考生們更好地復習《與制作》科目知識點,以下是搜索整理的一份自考《網頁設計與制作》測試題及答案,供參考練習,希望對大家有所幫助!想了解更多相關信息請持續關…