loss函數(shù)之NLLLoss绪囱,CrossEntropyLoss

NLLLoss

負(fù)對數(shù)似然損失函數(shù),用于處理多分類問題莹捡,輸入是對數(shù)化的概率值鬼吵。

對于包含N個樣本的batch數(shù)據(jù) D(x, y)x 是神經(jīng)網(wǎng)絡(luò)的輸出篮赢,并進(jìn)行歸一化和對數(shù)化處理齿椅。y是樣本對應(yīng)的類別標(biāo)簽琉挖,每個樣本可能是C種類別中的一個。

l_{n} 為第n個樣本對應(yīng)的loss涣脚,0 \leq y_{n} \leq C-1

l_{n}=-w_{y_{n}} x_{n, y_{n}}

w 用于多個類別之間樣本不平衡問題:

w_{c}= weight [c] \cdot 1\{c \neq ignore_index\}

class NLLLoss(_WeightedLoss):
    __constants__ = ['ignore_index', 'reduction']
    ignore_index: int
    def __init__(self, weight: Optional[Tensor] = None, size_average=None, ignore_index: int = -100,
                 reduce=None, reduction: str = 'mean') -> None:
        super(NLLLoss, self).__init__(weight, size_average, reduce, reduction)
        self.ignore_index = ignore_index
    def forward(self, input: Tensor, target: Tensor) -> Tensor:
        assert self.weight is None or isinstance(self.weight, Tensor)
        return F.nll_loss(input, target, weight=self.weight, ignore_index=self.ignore_index, reduction=self.reduction)

pytorch中通過torch.nn.NLLLoss類實(shí)現(xiàn)示辈,也可以直接調(diào)用F.nll_loss 函數(shù),代碼中的weight即是w遣蚀。size_averagereduce已經(jīng)棄用矾麻。reduction有三種取值mean, sum, none,對應(yīng)不同的返回\ell(x, y). 默認(rèn)為mean芭梯,對應(yīng)于一般情況下整體loss的計算险耀。

L=\left\{l_{1}, \ldots, l_{N}\right\}

\ell(x, y)=\left\{\begin{array}{ll} L, & \text { if reduction }=\text { 'none' } \\ \sum_{n=1}^{N} \frac{1}{\sum_{n=1}^{N} w_{y_{n}}} l_{n}, & \text { if reduction }=\text { 'mean' } \\ \sum_{n=1}^{N} l_{n}, & \text { if reduction }=\text { 'sum' }\end{array}\right.

參數(shù)ignore_index對應(yīng)于忽視的類別,即該類別的誤差不計入loss, 默認(rèn)為-100玖喘,例如甩牺,將padding處的類別設(shè)置為ignore_index

LogSoftmax

pytorch中使用torch.nn.LogSoftmax函數(shù)對神經(jīng)網(wǎng)絡(luò)的輸出進(jìn)行歸一化和對數(shù)化

\operatorname{LogSoftmax}\left(x_{i}\right)=\log \left(\frac{\exp \left(x_{i}\right)}{\sum_{j} \exp \left(x_{j}\right)}\right)

CrossEntropyLoss

交叉熵?fù)p失函數(shù),用于處理多分類問題芒涡,輸入是未歸一化神經(jīng)網(wǎng)絡(luò)輸出柴灯。

\text { CrossEntropyLoss }(x, y)=N L L \operatorname{Loss}(\log \operatorname{Softmax}(x), y)

對于包含N個樣本的batch數(shù)據(jù) D(x, y)x 是神經(jīng)網(wǎng)絡(luò)未歸一化的輸出费尽。y是樣本對應(yīng)的類別標(biāo)簽赠群,每個樣本可能是C種類別中的一個。

l_{n} 為第n個樣本對應(yīng)的loss旱幼,0 \leq y_{n} \leq C-1

l_{n} =-w_{y_{n}}(\log \frac{\exp(x_{n, y_{n}})}{\sum_{j}^{C} \exp (x_{n,j})})

l_{n}=-w_{y_{n}} (x_{n, y_{n}}+\log (\sum_{j}^{C}\exp (x_{n,j})))

class CrossEntropyLoss(_WeightedLoss):
    __constants__ = ['ignore_index', 'reduction']
    ignore_index: int
    def __init__(self, weight: Optional[Tensor] = None, size_average=None, ignore_index: int = -100,
                 reduce=None, reduction: str = 'mean') -> None:
        super(CrossEntropyLoss, self).__init__(weight, size_average, reduce, reduction)
        self.ignore_index = ignore_index
    def forward(self, input: Tensor, target: Tensor) -> Tensor:
        assert self.weight is None or isinstance(self.weight, Tensor)
        return F.cross_entropy(input, target, weight=self.weight,
                               ignore_index=self.ignore_index, reduction=self.reduction)

pytorch中通過torch.nn.CrossEntropyLoss類實(shí)現(xiàn)查描,也可以直接調(diào)用F.cross_entropy 函數(shù),代碼中的weight即是w柏卤。size_averagereduce已經(jīng)棄用冬三。reduction有三種取值mean, sum, none,對應(yīng)不同的返回\ell(x, y). 默認(rèn)為mean缘缚,對應(yīng)于一般情況下整體loss的計算勾笆。

L=\left\{l_{1}, \ldots, l_{N}\right\}

\ell(x, y)=\left\{\begin{array}{ll} L, & \text { if reduction }=\text { 'none' } \\ \sum_{n=1}^{N} \frac{1}{\sum_{n=1}^{N} w_{y_{n}}} l_{n}, & \text { if reduction }=\text { 'mean' } \\ \sum_{n=1}^{N} l_{n}, & \text { if reduction }=\text { 'sum' }\end{array}\right.

驗(yàn)證\text { CrossEntropyLoss }(x, y)=N L L \operatorname{Loss}(\log \operatorname{Softmax}(x), y)

import torch
import torch.nn as nn

# 多分類
m = torch.nn.LogSoftmax(dim=1)
loss_nll_fct = nn.NLLLoss(reduction="mean")
loss_ce_fct = nn.CrossEntropyLoss(reduction="mean")
input_src = torch.Tensor([[0.8, 0.9, 0.3], [0.8, 0.9, 0.3], [0.8, 0.9, 0.3], [0.8, 0.9, 0.3]])
target = torch.Tensor([1, 1, 0, 0]).long()
# 4個樣本,3分類
print(input_src.size())
print(target.size())
output = m(input_src)
loss_nll = loss_nll_fct(output, target)
print(loss_nll.item())
# 驗(yàn)證是否一致
loss_ce = loss_ce_fct(input_src, target)
print(loss_ce.item())
torch.Size([4, 3])
torch.Size([4])
0.9475762844085693
0.9475762844085693
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末桥滨,一起剝皮案震驚了整個濱河市窝爪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌齐媒,老刑警劉巖蒲每,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異喻括,居然都是意外死亡邀杏,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門唬血,熙熙樓的掌柜王于貴愁眉苦臉地迎上來望蜡,“玉大人唤崭,你說我怎么就攤上這事∑兀” “怎么了浩姥?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長状您。 經(jīng)常有香客問我,道長兜挨,這世上最難降的妖魔是什么膏孟? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮拌汇,結(jié)果婚禮上柒桑,老公的妹妹穿的比我還像新娘。我一直安慰自己噪舀,他們只是感情好魁淳,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著与倡,像睡著了一般界逛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上纺座,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天息拜,我揣著相機(jī)與錄音,去河邊找鬼净响。 笑死少欺,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的馋贤。 我是一名探鬼主播赞别,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼配乓!你這毒婦竟也來了仿滔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤扰付,失蹤者是張志新(化名)和其女友劉穎堤撵,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體羽莺,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡实昨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了盐固。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片荒给。...
    茶點(diǎn)故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡丈挟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出志电,到底是詐尸還是另有隱情曙咽,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布挑辆,位于F島的核電站例朱,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏鱼蝉。R本人自食惡果不足惜洒嗤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望魁亦。 院中可真熱鬧渔隶,春花似錦、人聲如沸洁奈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽利术。三九已至呈野,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間氯哮,已是汗流浹背际跪。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留喉钢,地道東北人姆打。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像肠虽,于是被迫代替她去往敵國和親幔戏。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容