損失函數(shù) | 名稱 | 適用場(chǎng)景 |
---|---|---|
torch.nn.MSELoss() | 均方誤差損失 | 回歸 |
torch.nn.L1Loss() | 平均絕對(duì)值誤差損失 | 回歸 |
torch.nn.CrossEntropyLoss() | 交叉熵?fù)p失 | 多分類 |
torch.nn.NLLLoss() | 負(fù)對(duì)數(shù)似然函數(shù)損失 | 多分類 |
torch.nn.NLLLoss2d() | 圖片負(fù)對(duì)數(shù)似然函數(shù)損失 | 圖像分割 |
torch.nn.KLDivLoss() | KL散度損失 | 回歸 |
torch.nn.BCELoss() | 二分類交叉熵?fù)p失 | 二分類 |
torch.nn.MarginRankingLoss() | 評(píng)價(jià)相似度的損失 | |
torch.nn.MultiLabelMarginLoss() | 多標(biāo)簽分類的損失 | 多標(biāo)簽分類 |
torch.nn.SmoothL1Loss() | 平滑的L1損失 | 回歸 |
torch.nn.SoftMarginLoss() | 多標(biāo)簽二分類問(wèn)題的損失 |
多標(biāo)簽二分類 |
torch.nn.CrossEntropyLoss(weight=None, # 1D張量,含n個(gè)元素,分別代表n類的權(quán)重,樣本不均衡時(shí)常用 size_average=None, ignore_index=-100, reduce=None, reduction='mean' )
參數(shù):
weight: 1D張量,含n個(gè)元素,分別代表n類的權(quán)重,樣本不均衡時(shí)常用, 默認(rèn)為None.
計(jì)算公式:
weight = None時(shí):
weight ≠ None時(shí):
輸入:
output: 網(wǎng)絡(luò)未加softmax的輸出
target: label值(0,1,2 不是one-hot)
代碼:
loss_func = CrossEntropyLoss(weight=torch.from_numpy(np.array([0.03,0.05,0.19,0.26,0.47])).float().to(device) ,size_average=True) loss = loss_func(output, target)
torch.nn.NLLLoss(weight=None, size_average=None, ignore_index=-100, reduce=None, reduction='mean')
輸入:
output: 網(wǎng)絡(luò)在logsoftmax后的輸出
target: label值(0,1,2 不是one-hot)
代碼:
loss_func = NLLLoss(weight=torch.from_numpy(np.array([0.03,0.05,0.19,0.26,0.47])).float().to(device) ,size_average=True) loss = loss_func(output, target)
總之, CrossEntropyLoss() = softmax + log + NLLLoss() = log_softmax + NLLLoss(), 具體等價(jià)應(yīng)用如下:
####################---CrossEntropyLoss()---####################### loss_func = CrossEntropyLoss() loss = loss_func(output, target) ####################---Softmax+log+NLLLoss()---#################### self.softmax = nn.Softmax(dim = -1) x = self.softmax(x) output = torch.log(x) loss_func = NLLLoss() loss = loss_func(output, target) ####################---LogSoftmax+NLLLoss()---###################### self.log_softmax = nn.LogSoftmax(dim = -1) output = self.log_softmax(x) loss_func = NLLLoss() loss = loss_func(output, target)
補(bǔ)充:常用損失函數(shù)用法小結(jié)之Pytorch框架
在用深度學(xué)習(xí)做圖像處理的時(shí)候,常用到的損失函數(shù)無(wú)非有四五種,為了方便Pytorch使用者,所以簡(jiǎn)要做以下總結(jié)
預(yù)測(cè)值與標(biāo)簽值進(jìn)行相差,然后取絕對(duì)值,根據(jù)實(shí)際應(yīng)用場(chǎng)所,可以設(shè)置是否求和,求平均,公式可見(jiàn)下,Pytorch調(diào)用函數(shù):nn.L1Loss
預(yù)測(cè)值與標(biāo)簽值進(jìn)行相差,然后取平方,根據(jù)實(shí)際應(yīng)用場(chǎng)所,可以設(shè)置是否求和,求平均,公式可見(jiàn)下,Pytorch調(diào)用函數(shù):nn.MSELoss
簡(jiǎn)單來(lái)說(shuō)就是L1和L2損失函數(shù)的綜合版本,結(jié)合了兩者的優(yōu)點(diǎn),公式可見(jiàn)下,Pytorch調(diào)用函數(shù):nn.SmoothL1Loss
簡(jiǎn)單來(lái)說(shuō),就是度量?jī)蓚€(gè)概率分布間的差異性信息,在某一程度上也可以防止梯度學(xué)習(xí)過(guò)慢,公式可見(jiàn)下,Pytorch調(diào)用函數(shù)有兩個(gè),一個(gè)是nn.BCELoss函數(shù),用的時(shí)候要結(jié)合Sigmoid函數(shù),另外一個(gè)是nn.BCEWithLogitsLoss()
也是度量?jī)蓚€(gè)概率分布間的差異性信息,Pytorch調(diào)用函數(shù)也有兩個(gè),一個(gè)是nn.NLLLoss,用的時(shí)候要結(jié)合log softmax處理,另外一個(gè)是nn.CrossEntropyLoss
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
標(biāo)簽:四川 上海 惠州 常德 鷹潭 黔西 黑龍江 益陽(yáng)
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《pytorch中常用的損失函數(shù)用法說(shuō)明》,本文關(guān)鍵詞 pytorch,中常,用的,損失,函數(shù),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。