最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

pytorch 實現(xiàn)二分類交叉熵逆樣本頻率權(quán)重

 更新時間:2021年05月24日 10:16:34   作者:*小呆  
這篇文章主要介紹了pytorch 實現(xiàn)二分類交叉熵逆樣本頻率權(quán)重的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

通常,由于類別不均衡,需要使用weighted cross entropy loss平衡。

def inverse_freq(label):
 """
 輸入label [N,1,H,W],1是channel數(shù)目
 """
    den = label.sum() # 0
    _,_,h,w= label.shape
    num = h*w
    alpha = den/num # 0
    return torch.tensor([alpha, 1-alpha]).cuda()
# train
...
loss1 = F.cross_entropy(out1, label.squeeze(1).long(), weight=inverse_freq(label))

補(bǔ)充:Pytorch踩坑記之交叉熵(nn.CrossEntropy,nn.NLLLoss,nn.BCELoss的區(qū)別和使用)

在Pytorch中的交叉熵函數(shù)的血淚史要從nn.CrossEntropyLoss()這個損失函數(shù)開始講起。

從表面意義上看,這個函數(shù)好像是普通的交叉熵函數(shù),但是如果你看過一些Pytorch的資料,會告訴你這個函數(shù)其實是softmax()和交叉熵的結(jié)合體。

然而如果去官方看這個函數(shù)的定義你會發(fā)現(xiàn)是這樣子的:

哇,竟然是nn.LogSoftmax()和nn.NLLLoss()的結(jié)合體,這倆都是什么玩意兒啊。再看看你會發(fā)現(xiàn)甚至還有一個損失叫nn.Softmax()以及一個叫nn.nn.BCELoss()。

我們來探究下這幾個損失到底有何種關(guān)系。

nn.Softmax和nn.LogSoftmax

首先nn.Softmax()官網(wǎng)的定義是這樣的:

嗯...就是我們認(rèn)識的那個softmax。那nn.LogSoftmax()的定義也很直觀了:

果不其然就是Softmax取了個log??梢詫憘€代碼測試一下:

import torch
import torch.nn as nn
 
a = torch.Tensor([1,2,3])
#定義Softmax
softmax = nn.Softmax()
sm_a = softmax=nn.Softmax()
print(sm)
#輸出:tensor([0.0900, 0.2447, 0.6652])
 
#定義LogSoftmax
logsoftmax = nn.LogSoftmax()
lsm_a = logsoftmax(a)
print(lsm_a)
#輸出tensor([-2.4076, -1.4076, -0.4076]),其中l(wèi)n(0.0900)=-2.4076

nn.NLLLoss

上面說過nn.CrossEntropy()是nn.LogSoftmax()和nn.NLLLoss的結(jié)合,nn.NLLLoss官網(wǎng)給的定義是這樣的:

The negative log likelihood loss. It is useful to train a classification problem with C classes

負(fù)對數(shù)似然損失 ,看起來好像有點晦澀難懂,寫個代碼測試一下:

import torch
import torch.nn
 
a = torch.Tensor([[1,2,3]])
nll = nn.NLLLoss()
target1 = torch.Tensor([0]).long()
target2 = torch.Tensor([1]).long()
target3 = torch.Tensor([2]).long()
 
#測試
n1 = nll(a,target1)
#輸出:tensor(-1.)
n2 = nll(a,target2)
#輸出:tensor(-2.)
n3 = nll(a,target3)
#輸出:tensor(-3.)

看起來nn.NLLLoss做的事情是取出a中對應(yīng)target位置的值并取負(fù)號,比如target1=0,就取a中index=0位置上的值再取負(fù)號為-1,那這樣做有什么意義呢,要結(jié)合nn.CrossEntropy往下看。

nn.CrossEntropy

看下官網(wǎng)給的nn.CrossEntropy()的表達(dá)式:

看起來應(yīng)該是softmax之后取了個對數(shù),寫個簡單代碼測試一下:

import torch
import torch.nn as nn
 
a = torch.Tensor([[1,2,3]])
target = torch.Tensor([2]).long()
logsoftmax = nn.LogSoftmax()
ce = nn.CrossEntropyLoss()
nll = nn.NLLLoss()
 
#測試CrossEntropyLoss
cel = ce(a,target)
print(cel)
#輸出:tensor(0.4076)
 
#測試LogSoftmax+NLLLoss
lsm_a = logsoftmax(a)
nll_lsm_a = nll(lsm_a,target)
#輸出tensor(0.4076)

看來直接用nn.CrossEntropy和nn.LogSoftmax+nn.NLLLoss是一樣的結(jié)果。為什么這樣呢,回想下交叉熵的表達(dá)式:

l(x,y)=-\sum y*logx=\left\{\begin{matrix} -logx , y=1& \\ 0,y=0& \end{matrix}\right.

其中y是label,x是prediction的結(jié)果,所以其實交叉熵?fù)p失就是負(fù)的target對應(yīng)位置的輸出結(jié)果x再取-log。這個計算過程剛好就是先LogSoftmax()再NLLLoss()。

所以我認(rèn)為nn.CrossEntropyLoss其實應(yīng)該叫做softmaxloss更為合理一些,這樣就不會誤解了。

nn.BCELoss

你以為這就完了嗎,其實并沒有。還有一類損失叫做BCELoss,寫全了的話就是Binary Cross Entropy Loss,就是交叉熵應(yīng)用于二分類時候的特殊形式,一般都和sigmoid一起用,表達(dá)式就是二分類交叉熵:

直覺上和多酚類交叉熵的區(qū)別在于,不僅考慮了y_n=1的樣本,也考慮了y_n=0的樣本的損失。

總結(jié)

nn.LogSoftmax是在softmax的基礎(chǔ)上取自然對數(shù)

nn.NLLLoss是負(fù)的似然對數(shù)損失,但Pytorch的實現(xiàn)就是把對應(yīng)target上的數(shù)取出來再加個負(fù)號,要在CrossEntropy中結(jié)合LogSoftmax來用

BCELoss是二分類的交叉熵?fù)p失,Pytorch實現(xiàn)中和多分類有區(qū)別

Pytorch是個深坑,讓我們一起扎根使用手冊,結(jié)合實踐踏平這些坑吧暴風(fēng)哭泣

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python正則表達(dá)式函數(shù)match()和search()使用全面指南

    Python正則表達(dá)式函數(shù)match()和search()使用全面指南

    在Python中,正則表達(dá)式是強(qiáng)大的工具,能夠用于文本匹配、搜索和替換,re模塊提供了許多函數(shù)來處理正則表達(dá)式,其中match()和search()是兩個常用的函數(shù),本文將深入探討這兩個函數(shù)的用法、區(qū)別和示例,幫助你更好地理解它們的功能
    2024-01-01
  • python?繪制3D圖案例分享

    python?繪制3D圖案例分享

    這篇文章主要介紹了python?繪制3D圖案例分享,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下,希望對你的學(xué)習(xí)有所幫助
    2022-07-07
  • 淺談python 調(diào)用open()打開文件時路徑出錯的原因

    淺談python 調(diào)用open()打開文件時路徑出錯的原因

    這篇文章主要介紹了淺談python 調(diào)用open()打開文件時路徑出錯的原因,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • 關(guān)于pyinstaller生成.exe程序報錯:缺少.ini文件的分析

    關(guān)于pyinstaller生成.exe程序報錯:缺少.ini文件的分析

    這篇文章主要介紹了關(guān)于pyinstaller生成.exe程序報錯:缺少.ini文件的分析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Python爬蟲進(jìn)階之Beautiful Soup庫詳解

    Python爬蟲進(jìn)階之Beautiful Soup庫詳解

    這篇文章主要介紹了Python爬蟲進(jìn)階之Beautiful Soup庫詳解,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python爬蟲的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Pandas爆炸函數(shù)的使用技巧

    Pandas爆炸函數(shù)的使用技巧

    同事舉了個簡單的例子來說明爆炸函數(shù)的功能,我當(dāng)場就記下了這個函數(shù)名稱:爆炸函數(shù)。Hive在我的工作中使用的并不多,于是我在想:Pandas能夠?qū)崿F(xiàn)這個功能嗎?本文就來了解一下
    2021-05-05
  • 在python中實現(xiàn)強(qiáng)制關(guān)閉線程的示例

    在python中實現(xiàn)強(qiáng)制關(guān)閉線程的示例

    今天小編就為大家分享一篇在python中實現(xiàn)強(qiáng)制關(guān)閉線程的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Python學(xué)習(xí)之加密模塊使用詳解

    Python學(xué)習(xí)之加密模塊使用詳解

    加密模塊在工作中被廣泛應(yīng)用。比如數(shù)據(jù)的傳入 不希望被捕獲,通過把數(shù)據(jù)加密,這樣即使被捕獲也無法獲取到數(shù)據(jù)的真實信息。本文將學(xué)習(xí)一下Python中的加密模塊的使用 方法,需要的可以參考一下
    2022-03-03
  • WIndows10系統(tǒng)下面安裝Anaconda、Pycharm及Pytorch環(huán)境全過程(NVIDIA?GPU版本)

    WIndows10系統(tǒng)下面安裝Anaconda、Pycharm及Pytorch環(huán)境全過程(NVIDIA?GPU版本)

    這篇文章主要給大家介紹了關(guān)于WIndows10系統(tǒng)下面安裝Anaconda、Pycharm及Pytorch環(huán)境(NVIDIA?GPU版本)的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • Python動態(tài)導(dǎo)入模塊的方法實例分析

    Python動態(tài)導(dǎo)入模塊的方法實例分析

    這篇文章主要介紹了Python動態(tài)導(dǎo)入模塊的方法,結(jié)合實例形式較為詳細(xì)的分析了Python動態(tài)導(dǎo)入系統(tǒng)模塊、自定義模塊以及模塊列表的相關(guān)操作技巧,需要的朋友可以參考下
    2018-06-06

最新評論

昭苏县| 余庆县| 象山县| 枣阳市| 中超| 兴化市| 光山县| 茌平县| 峨山| 高陵县| 平罗县| 南江县| 嘉善县| 竹北市| 天峨县| 大庆市| 合阳县| 张家界市| 巩义市| 景东| 天台县| 宜州市| 宾阳县| 介休市| 安乡县| 子长县| 蕉岭县| 浪卡子县| 台州市| 弥勒县| 宜兰县| 喀什市| 盘山县| 新邵县| 清徐县| 宣恩县| 韶山市| 三台县| 连州市| 威海市| 正镶白旗|