交叉熵 pytorch中的nn.CrossEntropyLoss()函數


參考鏈接:
https://www.cnblogs.com/JeasonIsCoding/p/10171201.html
https://blog.csdn.net/qq_27095227/article/details/103775032
二分類的交叉熵公式是:

如果是多分類,交叉熵公式如下:

這里為了更加直觀的理解計算過程,舉例說明:
比如我們舉例:
假設我們有個一樣本,他經過我們的神經網絡后會輸出一個5維的向量,分別代表這個樣本分別屬於這5種標簽的數值,(注意此時我們的5個數求和還並不等於1,需要先經過softmax處理).比如,我們的對應的5類的輸出以及正確的標簽類別:

 inputs = torch.FloatTensor([[-0.3830,-0.0102,-1.4235,-0.5212,0.9011]])
 target = torch.LongTensor([4])

在計算之前,我們首先需要計算y冒號,

這是經過softmax的各個類別的得分,加起來和為1. softma公式如下:

y冒有了還缺

這個是真實標簽,會根據類別整成one-hot形式,現在類別是4,那么就是[0,0,0,0,1]. 所以,這兩個都有了,帶入上面公式:

    import torch
    import torch.nn as nn
    import math

    inputs = torch.FloatTensor([[-0.3830,-0.0102,-1.4235,-0.5212,0.9011]])
    target = torch.LongTensor([4])
    ce = nn.CrossEntropyLoss()
    loss = ce(inputs, target)
    print(loss)

    sum_ = 0
    for i in range(5):
        sum_ += math.exp(inputs[0][i])
    my_resutlt = -0.9011 + math.log(sum_)
    print("my_=",my_resutlt)

打印如下:
tensor(0.7020)
my_= 0.7020485611606857
可以看到結果一致!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM