交叉熵(Cross Entropy loss)


 

交叉熵

分類問題常用的損失函數為交叉熵(Cross Entropy Loss)。
交叉熵描述了兩個概率分布之間的距離,交叉熵越小說明兩者之間越接近。
原理這篇博客介紹的簡單清晰:
https://blog.csdn.net/xg123321123/article/details/52864830
總結: 熵是信息量的期望值,它是一個隨機變量的確定性的度量。
熵越大,變量的取值越不確定;反之,熵越小,變量取值就越確定。
熵與概率的關系如圖:
在這里插入圖片描述盡管交叉熵刻畫的是兩個概率分布之間的距離,但是神經網絡的輸出卻不一定是一個概率分布。為此我們常常用Softmax回歸將神經網絡前向傳播得到的結果變成概率分布。

總之

在分類問題中用交叉熵可以更好的體現loss的同時,使其仍然是個凸函數,這對於梯度下降時的搜索很有用。
反觀平方和函數,經過softmax后使得函數是一個非凸函數。

分類問題用 One Hot Label + Cross Entropy Loss
Training 過程,分類問題用 Cross Entropy Loss,回歸問題用 Mean Squared Error。
validation / testing 過程,使用 Classification Error更直觀,也正是我們最為關注的指標。

代碼

class CrossEntropy2d(nn.Module):
    def __init__(self):
        super(CrossEntropy2d, self).__init__()
        self.criterion = nn.CrossEntropyLoss(weight=None, size_average=True)  
    def forward(self, out, target):
        n, c, h, w = out.size()         # n:batch_size, c:class
        out = out.view(-1, c)           # (n*h*w, c)
        target = target.view(-1)        # (n*h*w)
        # print('out', out.size(), 'target', target.size())
        loss = self.criterion(out, target)
        return loss

# 調用方式
criterion = loss.CrossEntropy2d()
loss = criterion(out, labels)

參考文獻:

https://blog.csdn.net/xg123321123/article/details/80781611


免責聲明!

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



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