在服務(wù)器訓(xùn)練模型的時候蜗顽,使用torch.nn.CrossEntropy()(pred, labels)
的weight
來計算類別加權(quán)l(xiāng)oss時揽咕,報錯Segmentation fault(core dumped)
拙寡,程序終止最易,并且沒有出現(xiàn)traceback羞海,嘗試了網(wǎng)上說的很多種方法执隧,唯獨沒敢嘗試conda --update all
揩抡,這個指令還是不要輕易運行。
然后我在控制臺輸出了pred和labels的具體值镀琉,是兩個正常的tensor烛占,并且將其復(fù)制下來在本地運行這一函數(shù)挪哄,并未報錯响蓉。
原來是需要把weight轉(zhuǎn)換為cpu的形式檬某。即
loss_func = torch.nn.CrossEntropy(weight=weight.cpu())
loss = loss_func(pred, labels)
怪不得本地代碼沒問題,因為本地的weight本來就是一個cpu形式的tensor... 雖然我也沒想明白原因是什么钓试。