Focal loss函數(shù)及代碼

一扮匠、Focal loss損失函數(shù)

Focal Loss的引入主要是為了解決**難易樣本數(shù)量不平衡****(注意,有區(qū)別于正負(fù)樣本數(shù)量不平衡)的問(wèn)題,實(shí)際可以使用的范圍非常廣泛。

本文的作者認(rèn)為,易分樣本(即贫贝,置信度高的樣本)對(duì)模型的提升效果非常小,模型應(yīng)該主要關(guān)注與那些難分樣本蛉谜。一個(gè)簡(jiǎn)單的思想:把高置信度(p)樣本的損失再降低一些不就好了嗎稚晚!

focal loss函數(shù)公式:
FL(p) = -a(1-p)^\lambda log(p)
其中,(1)a為類(lèi)別權(quán)重型诚,用來(lái)權(quán)衡正負(fù)樣本不均衡問(wèn)題客燕,倘若負(fù)樣本越多,給負(fù)樣本的a權(quán)重就越小狰贯,這樣就可以降低負(fù)樣本的影響也搓。加一個(gè)小于1的超參數(shù),相當(dāng)于把Loss曲線(xiàn)整體往下拉一些涵紊,使得當(dāng)樣本概率較大的時(shí)候影響減小傍妒。
(2)\lambda 表示難分樣本權(quán)重摸柄,用來(lái)衡量難分樣本和易分樣本颤练,對(duì)于正類(lèi)樣本而言,預(yù)測(cè)結(jié)果為0.95肯定是簡(jiǎn)單樣本塘幅,所以(1-0.95)的gamma次方就會(huì)很小昔案,這時(shí)損失函數(shù)值就變得更小。而預(yù)測(cè)概率為0.3的樣本其損失相對(duì)很大电媳。即正樣本:概率越小踏揣,表示hard example,損失越大匾乓; 負(fù)樣本:概率越大捞稿,表示hard example,損失越大拼缝。γ 起到了平滑的作用娱局,作者的實(shí)驗(yàn)中,論文采用α=0.25咧七,γ=2效果最好衰齐。。針對(duì)hard example继阻,Pt比較小耻涛,則權(quán)重比較大,讓網(wǎng)絡(luò)傾向于利用這樣的樣本來(lái)進(jìn)行參數(shù)的更新

Focal loss缺點(diǎn)(騰訊面試):

(1) 對(duì)異常樣本敏感: 假如訓(xùn)練集中有個(gè)樣本label標(biāo)錯(cuò)了瘟檩,那么focal loss會(huì)一直放大這個(gè)樣本的loss(模型想矯正回來(lái))抹缕,導(dǎo)致網(wǎng)絡(luò)往錯(cuò)誤方向?qū)W習(xí)。
(2)對(duì)分類(lèi)邊界異常點(diǎn)處理不理想:由于邊界樣本表示相似性較高墨辛,對(duì)于不同異常值表示卓研,每次損失更新時(shí),都會(huì)有反復(fù)在分類(lèi)決策面(0.5)上反復(fù)橫跳的點(diǎn)睹簇,導(dǎo)致模型收斂速度下降奏赘,退化成交叉熵?fù)p失。

二带膀、Focal loss損失函數(shù)代碼

import torch
import torch.nn as nn
import torch.nn.functional as F
from torch.autograd import Variable

class FocalLoss(nn.Module):
    def __init__(self, class_num, alpha=0.20, gamma=1.5, use_alpha=False, size_average=True):
        super(FocalLoss, self).__init__()
        self.class_num = class_num
        self.alpha = alpha
        self.gamma = gamma
        if use_alpha:
            self.alpha = torch.tensor(alpha).cuda()
            # self.alpha = torch.tensor(alpha)

        self.softmax = nn.Softmax(dim=1)
        self.use_alpha = use_alpha
        self.size_average = size_average

    def forward(self, pred, target):

        prob = self.softmax(pred.view(-1,self.class_num))
        prob = prob.clamp(min=0.0001,max=1.0)

        target_ = torch.zeros(target.size(0),self.class_num).cuda()
        # target_ = torch.zeros(target.size(0),self.class_num)
        target_.scatter_(1, target.view(-1, 1).long(), 1.)

        if self.use_alpha:
            batch_loss = - self.alpha.double() * torch.pow(1-prob,self.gamma).double() * prob.log().double() * target_.double()
        else:
            batch_loss = - torch.pow(1-prob,self.gamma).double() * prob.log().double() * target_.double()

        batch_loss = batch_loss.sum(dim=1)

        if self.size_average:
            loss = batch_loss.mean()
        else:
            loss = batch_loss.sum()

        return loss

三志珍、Focal loss損失函數(shù)引用及使用

# 函數(shù)引用(focal_loss為模型文件名)
from focal_loss import FocalLoss

#...

# 損失函數(shù)初始化
criterion = FocalLoss(class_num=3)


#...

# 獲得損失函數(shù)
loss = criterion(outputs, targets)


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市垛叨,隨后出現(xiàn)的幾起案子伦糯,更是在濱河造成了極大的恐慌,老刑警劉巖嗽元,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件敛纲,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡剂癌,警方通過(guò)查閱死者的電腦和手機(jī)淤翔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)佩谷,“玉大人旁壮,你說(shuō)我怎么就攤上這事监嗜。” “怎么了抡谐?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵裁奇,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我麦撵,道長(zhǎng)刽肠,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任免胃,我火速辦了婚禮音五,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘羔沙。我一直安慰自己躺涝,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布扼雏。 她就那樣靜靜地躺著诞挨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪呢蛤。 梳的紋絲不亂的頭發(fā)上惶傻,一...
    開(kāi)封第一講書(shū)人閱讀 51,482評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音其障,去河邊找鬼银室。 笑死,一個(gè)胖子當(dāng)著我的面吹牛励翼,可吹牛的內(nèi)容都是我干的蜈敢。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼汽抚,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼抓狭!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起造烁,我...
    開(kāi)封第一講書(shū)人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤否过,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后惭蟋,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體苗桂,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年告组,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了煤伟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖便锨,靈堂內(nèi)的尸體忽然破棺而出围辙,到底是詐尸還是另有隱情,我是刑警寧澤放案,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布酌畜,位于F島的核電站,受9級(jí)特大地震影響卿叽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜恳守,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一考婴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧催烘,春花似錦沥阱、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至舰始,卻和暖如春崇棠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背丸卷。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工枕稀, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人谜嫉。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓萎坷,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親沐兰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子哆档,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

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