pytroch中的交叉熵

2021-10-05 10:55:53 字數 1460 閱讀 1586

今天上午心情起伏很大,本以為找到了**中的錯誤,結果發現並不是這麼回事。

第一,看了幾篇部落格發現,分類問題的標籤應該用one hot(獨熱碼),而我一直用的是普通數字(我的專案一共是四分類,所以用的是0,1,2,3)。本來想著趕緊回去改,幸好又看到一偏部落格說pytorch在計算交叉熵時回自動將結果轉換成one hot編碼再計算。將信將疑的我去用**驗證了一下,發現的確如此,所以並不需要修改這個啦。(而且如果你想用獨熱碼的向量作為標籤pytorch好像還不支援,好像只支援一維的)

第二,我的cnn輸出並沒有加softmax層。本來想加上,又看到一篇部落格說加和不加算出來的結果是一樣的。於是我又去驗證了一下。發現直接用全連線層輸出計算和加f.softmax()計算出的值是不一樣的,但和f.log_softmax()計算結果相等,所以可以理解為是預設加了log_softmax()層。

log_softmax驗證:

a=torch.tensor([[

0.0189

,0.1621,-

0.1308,-

0.1770]]

)label=torch.tensor([2

])b=f.log_softmax(a,dim=1)

print

(b)l=loss(a,label)

l2=loss(b,label)

print

(l)print

(l2)

tensor([[

-1.3447,-

1.2015,-

1.4944,-

1.5406]]

)tensor(

1.4944

)tensor(

1.4944

)

one hot驗證:1到0的距離等於1到3的距離

a=torch.tensor([[

0.1,

0.7,

0.1,

0.1]])

label=torch.tensor([1

])label2=torch.tensor([3

])label3=torch.tensor([0

])l1=loss(a,label)

l2=loss(a,label2)

l3=loss(a,label3)

print

(l1)

print

(l2)

print

(l3)

```python

tensor(

0.9732

)tensor(

1.5732

)tensor(

1.5732

)

如果labe=4會報錯 out of bound,說明四分類的標籤只能是0,1,2,3而不能是1,2,3,4。

最後,小白表示,如有錯誤請各位包涵!也請各位前輩不吝賜教!謝謝!

熵與交叉熵

針對引文中的問題 如果乙個字出現的頻率為yi 則該字所使用的編碼bit數為lo g1yi 如果整段文字的概率分布都已知,那我們可以得出編碼乙個字所需的最優bit數 h y iyil og1y i 其中h y 就是熵 如果我們已知的是乙個錯誤的分布,並且使用該分布確定的編碼bit數,稱為交叉熵h y ...

tensorflow中的幾種交叉熵

準備1 先說一下什麼是logit,logit函式定義為 是一種將取值範圍在 0,1 內的概率對映到實數域 inf,inf 的函式,如果p 0.5,函式值為0 p 0.5,函式值為負 p 0.5,函式值為正。相對地,softmax和sigmoid則都是將 inf,inf 對映到 0,1 的函式。在te...

cross entropy交叉熵 相對熵

1.熵用來表示所有資訊量的期望。2.相對熵又稱kl散度,如果我們對於同乙個隨機變數 x 有兩個單獨的概率分布 p x 和 q x 我們可以使用 kl 散度 kullback leibler kl divergence 來衡量這兩個分布的差異。3.交叉熵 相對熵 p的熵 交叉熵。在機器學習中,我們需要...