交叉熵方法

交叉熵損失計算示例

交叉熵損失公式

二分類

其中y為label,p^為預(yù)測的正類別概率,即在二分類中通過sigmoid函數(shù)得出的正類別概率大小。

分類


舉例:

criterion = nn.CrossEntropyLoss()

input = torch.randn(3, 5, requires_grad=True)

target = torch.empty(3, dtype=torch.long).random_(5)

loss = criterion(input, target)

上述代碼即為求交叉熵損失的示例,輸入為隨機生成的三個具有5個標(biāo)簽的樣本,目標(biāo)標(biāo)簽為同樣隨機生成的3個具有唯一正確標(biāo)簽的樣本,loss即為函數(shù)torch.nn.CrossEntropyLoss()求得的交叉熵損失。

torch.nn.CrossEntropyLoss()內(nèi)的核心代碼如下:

```

batch_loss = 0.

for i in range(input.shape[0]):? # 遍歷樣本數(shù)

? ? numerator = np.exp(input[i, target[i]]) ? # 對每個目標(biāo)標(biāo)簽求指數(shù)

? ? denominator = np.sum(np.exp(input[i, :])) # 每個目標(biāo)標(biāo)簽所在樣本總體指數(shù)之和 ?

? ? loss = -np.log(numerator / denominator)? ? # 損失函數(shù)對數(shù)公式

? ? batch_loss += loss? # 所有樣本損失之和

```

其中,公式中損失函數(shù)只有對數(shù)log(numerator / denominator)原因是,其他標(biāo)簽?zāi)J系數(shù)為0,因此代碼中省略,因此代碼也可寫成如下:

```

for i in range(input.shape[0]):

Loss[i]=-input[i, target[i]+sum(math.exp(input[i][:]))

loss = sum(Loss)

```

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容