pytorch中交叉熵?fù)p失(nn.CrossEntropyLoss())的計(jì)算過程詳解
公式
首先需要了解CrossEntropyLoss的計(jì)算過程,交叉熵的函數(shù)是這樣的:

其中,其中yi表示真實(shí)的分類結(jié)果。這里只給出公式,關(guān)于CrossEntropyLoss的其他詳細(xì)細(xì)節(jié)請(qǐng)參照其他博文。
測(cè)試代碼(一維)
import torch
import torch.nn as nn
import math
criterion = nn.CrossEntropyLoss()
output = torch.randn(1, 5, requires_grad=True)
label = torch.empty(1, dtype=torch.long).random_(5)
loss = criterion(output, label)
print("網(wǎng)絡(luò)輸出為5類:")
print(output)
print("要計(jì)算label的類別:")
print(label)
print("計(jì)算loss的結(jié)果:")
print(loss)
first = 0
for i in range(1):
first = -output[i][label[i]]
second = 0
for i in range(1):
for j in range(5):
second += math.exp(output[i][j])
res = 0
res = (first + math.log(second))
print("自己的計(jì)算結(jié)果:")
print(res)

測(cè)試代碼(多維)
import torch
import torch.nn as nn
import math
criterion = nn.CrossEntropyLoss()
output = torch.randn(3, 5, requires_grad=True)
label = torch.empty(3, dtype=torch.long).random_(5)
loss = criterion(output, label)
print("網(wǎng)絡(luò)輸出為3個(gè)5類:")
print(output)
print("要計(jì)算loss的類別:")
print(label)
print("計(jì)算loss的結(jié)果:")
print(loss)
first = [0, 0, 0]
for i in range(3):
first[i] = -output[i][label[i]]
second = [0, 0, 0]
for i in range(3):
for j in range(5):
second[i] += math.exp(output[i][j])
res = 0
for i in range(3):
res += (first[i] + math.log(second[i]))
print("自己的計(jì)算結(jié)果:")
print(res/3)

nn.CrossEntropyLoss()中的計(jì)算方法
注意:在計(jì)算CrossEntropyLosss時(shí),真實(shí)的label(一個(gè)標(biāo)量)被處理成onehot編碼的形式。
在pytorch中,CrossEntropyLoss計(jì)算公式為:

CrossEntropyLoss帶權(quán)重的計(jì)算公式為(默認(rèn)weight=None):

以上這篇pytorch中交叉熵?fù)p失(nn.CrossEntropyLoss())的計(jì)算過程詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Pytorch相關(guān)知識(shí)介紹與應(yīng)用
最近又重拾了機(jī)器學(xué)習(xí)的相關(guān)技術(shù),在本科畢設(shè)的階段下學(xué)習(xí)使用了Tensorflow 2.x工具,當(dāng)時(shí)也是不求甚解,直接拿來(lái)用了,但現(xiàn)在已經(jīng)有充足的時(shí)間、精力和基礎(chǔ)知識(shí)來(lái)重新學(xué)習(xí)一下2022-11-11
Python?Pandas數(shù)據(jù)處理高頻操作詳解
這篇文章主要為大家整理了一些Python?Pandas數(shù)據(jù)處理高頻操作,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定的幫助,需要的可以參考一下2022-06-06
Python 相對(duì)路徑報(bào)錯(cuò):"No such file or 
如果你取相對(duì)路徑不是在主文件里,可能就會(huì)有相對(duì)路徑問題:"No such file or directory",由于python 的相對(duì)路徑,相對(duì)的都是主文件所以會(huì)出現(xiàn)Python 相對(duì)路徑報(bào)錯(cuò),今天小編給大家?guī)?lái)了完美解決方案,感興趣的朋友一起看看吧2023-02-02
python多進(jìn)程使用apply_async的使用方法詳解
這篇文章主要介紹了python多進(jìn)程使用apply_async使用方法詳解,apply_async是異步非阻塞式,不用等待當(dāng)前進(jìn)程執(zhí)行完畢,隨時(shí)跟進(jìn)操作系統(tǒng)調(diào)度來(lái)進(jìn)行進(jìn)程切換,即多個(gè)進(jìn)程并行執(zhí)行,提高程序的執(zhí)行效率2022-09-09
用Pycharm實(shí)現(xiàn)鼠標(biāo)滾輪控制字體大小的方法
今天小編就為大家分享一篇用Pycharm實(shí)現(xiàn)鼠標(biāo)滾輪控制字體大小的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2019-01-01
基于OpenCV的攝像頭測(cè)距的實(shí)現(xiàn)示例
本文主要介紹了基于OpenCV的攝像頭測(cè)距的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
使用Python實(shí)現(xiàn)U盤數(shù)據(jù)自動(dòng)拷貝
這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)U盤數(shù)據(jù)自動(dòng)拷貝,即當(dāng)電腦上有U盤插入時(shí)自動(dòng)復(fù)制U盤內(nèi)的所有內(nèi)容,希望對(duì)大家有所幫助2025-02-02
Python接口自動(dòng)化之淺析requests模塊post請(qǐng)求
這篇文章Python接口自動(dòng)化之淺析requests模塊post請(qǐng)求,以下主要介紹requests模塊中的post請(qǐng)求的使用,post源碼,data、json參數(shù)應(yīng)用場(chǎng)景及實(shí)戰(zhàn)2021-08-08
利用Python多處理庫(kù)處理3D數(shù)據(jù)詳解
本文將介紹處理大量數(shù)據(jù)時(shí)非常方便的工具,例如tqdm與 multiprocessing?imap??一起使用、并行處理檔案、繪制和處理3D數(shù)據(jù)等,感興趣的小伙伴可以了解一下2021-12-12

