1. RuntimeError: reduce failed to synchronize: cudaErrorAssert: device-side assert triggered
當(dāng)使用NLLLoss或CrossEntropyLoss時(shí)梗劫,并且當(dāng)您的數(shù)據(jù)集具有負(fù)標(biāo)簽(或標(biāo)簽數(shù)量大于類數(shù))時(shí),通常會(huì)發(fā)生這種錯(cuò)誤拼岳。這也是您使斷言t >= 0 && t < n_classes失敗的確切錯(cuò)誤阿浓。
對(duì)于MSELoss不會(huì)發(fā)生這種情況抛虏,但是OP提到某個(gè)地方有一個(gè)CrossEntropyLoss,因此會(huì)發(fā)生錯(cuò)誤(程序在另一行異步崩潰)芳悲。解決方案是清理數(shù)據(jù)集并確保滿足t >= 0 && t < n_classes(其中t表示標(biāo)簽)榛丢。
另外,如果您使用NLLLoss或BCELoss(然后分別需要softmax或sigmoid激活)彻况,請(qǐng)確保網(wǎng)絡(luò)輸出在0到1的范圍內(nèi)谁尸。請(qǐng)注意,對(duì)于CrossEntropyLoss或BCEWithLogitsLoss纽甘,這不是必需的良蛮,因?yàn)樗鼈冊(cè)趌oss函數(shù)內(nèi)部實(shí)現(xiàn)了激活函數(shù)。