CrossEntropy Loss 學習記錄

2021-10-07 07:49:59 字數 999 閱讀 2920

一直對crossentropy loss的概念比較模糊,今天看了一下,終於理解,記錄一下防止忘記!

首先要明白交叉熵的概念

交叉熵主要是用來判定實際的輸出與期望的輸出的接近程度,交叉熵越小則表明模型的不確定性越小,模型越穩定。

原版交叉熵函式為

其中p為期望輸出(label),q為實際輸出概率。

而在crossentropy loss中用到的交叉熵函式為

在crossentropy loss 中, target 採用one-hot 的形式,即除了label位置為1,其餘均為0

其中去掉了原版函式的後半部分,因為模型所需要的是實際輸出與期望輸出越接近越好。如果加上後半部分,即使期望輸出與實際輸出完全不同(one hot 對應位置為0),也會得到乙個很小的h(p,q)值,那麼會對模型起乙個誤導的作用,模型認為自己學到了相關的知識,但實際上完全學錯了方向。去掉後半部分就相當於去掉了乙個干擾項,能夠讓模型更好的學習到所需知識,縮小loss。

上面的公式只是針對乙個類別而言,當任務為多分類任務時,需對每一類別都採用上述公式,並最後加起來。

在計算交叉熵之前,需要先計算出每一類別的概率,即需要先採用softmax,將輸出計算為概率。

nn.torch.crossentropy loss中,將softmax log 和 nllloss 結合在一起

x[class] 表示只需要計算label對應部分即可,詳細可看一下nllloss的介紹。

用crossentropy loss作損失函式的模型不需要在輸出時softmax。

crossentropy loss 還可以設定每一類別的權重,以應對類別不平衡的情況

tensorflow windows 學習記錄

1.python 版本3.7.1,安裝tensorflow.pip install tensorflow pip install numpy upgrade 2.檢視tensorflow 版本 進入python後 import tensorflow as tf tf.version 3.conda的...

ingress controller學習記錄

按文件操作 wgetwget 在service的spec中將nodeport固定一下。deploy demo.yaml的內容 結果 此時,訪問nodeip nodeport已經可以看到輸出,如圖 建立ingress root master ingress nginx kubectl get ingr...

《學習php與MySQL》隨便記記

初學php.記得都是基本點 每個php語句的結束都要有分號 注釋和c一樣 全域性變數用gobal定義 例如gobal age 靜態變數,static age 0 超級全域性變數,這是預定義的 if elseif else switch,break,while,do.while,for functio...