RuntimeError: cuda runtime error (59) : device-side assert triggered(已解決)


是這樣的,在跑fasterrcnn的時候,要把原模型21個類別改為自己的類別數目,第一次改過后運行沒有報錯,第二次再修改就報錯了,錯誤如下
1 block: [0,0,0], thread: [16,0,0] Assertion `t >= 0 && t < n_classes` failed.
2 RuntimeError: cuda runtime error (59) : device-side assert triggered

網上的主要解決方法如下:

  造成這個問題的原因就是在做分類任務時,訓練數據中存在超出分類數目的標簽。比如我一共設置了8個類,但是訓練數據中的標簽里出現了9,就會報這個錯誤。那么問題來了,這里有一個陷阱。訓練數據中的標簽含0也會報上述錯誤。這個就非常詭異了。一般我們都從0開始數,但是在pytorch里0以下的類別標簽都是要報錯的。所以如果類別標簽從0開始,要給所有類別標簽都加上1。

       但是我查看分析了自己的類別確實從0開始,所以應該不是這個錯,經過多次百度Google,終於在一篇博文里面找到我的問題里面的線索。
是這樣的第一次跑程序時是16個類別(我少刪了4個,沒發現)運行后發現多了四個類別,所以我刪除這四個類別,但是再次運行就報了上面的錯誤,原因是我們每次
運行的時候都要把上次運行生成的cache給刪除才行,因為我沒刪除,所以程序認為是16個類別,但是只提供了12個類別。所以報了這個錯,刪除cache重新運行就沒問題了。

 

 這個bug真實惡心到我了,不過還好終於解決了,就記錄一下。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM