日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Pytorch神经网络理论篇】 09 神经网络模块中的损失函数

發布時間:2024/7/5 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Pytorch神经网络理论篇】 09 神经网络模块中的损失函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 訓練模型的步驟與方法

  • 將樣本書記輸入到模型中計算出正向的結果
  • 計算模型結果與樣本目標數值之間的差值(也稱為損失值loss)
  • 根據損失值,使用鏈式反向求導的方法,依次計算出模型中每個參數/權重的梯度
  • 使用優化器中的策略對模型中的參數進行更新

2 神經網絡模塊中的損失函數

2.1 損失函數定義

損失函數主要用來計算“輸出值”與“輸入值”之間的差距,即誤差,反向傳播中依靠損失函數找到最優的權重。

2.2 L1損失函數/最小絕對值偏差(LAD)/最小絕對值誤差(LAE)

L1損失函數用于最小化誤差,該誤差是真實值和預測值之間的所有絕對差之和。

2.2.1 代碼實現==>以類的形式進行封裝,需要對其實例化后再使用

import torch ### pre:模型的輸出值 ### label:模型的目標值 loss = torch.nn.L1Loss()[pre,label]

2.3 L2損失函數

L2損失函數用于最小化誤差,該誤差是真實值和預測值之間所有平方差的總和

2.4 均值平方差損失(MSE)

均值平方差損失(MSE)主要針對的是回歸問題,主要表達預測值域真實值之間的差異

2.4.1 MSE的公式表述

?這里的n表示n個樣本。ylabel與ypred的取值范圍一般為0-1。

2.4.2 注釋

  • MSE的值越小,表明模型越好
  • 在神經網絡的計算中,預測值與真實值要控制在相同的數據分布中
  • 假設預測值輸入Sigmoid激活函數后其取值范圍為0到1之間,則真實值的取值范圍也應該取到0到1之間

2.4.3 代碼實現==>以類的形式進行封裝,需要對其實例化后再使用

import torch ### pre:模型的輸出值 ### label:模型的目標值 loss = torch.nn.MSELoss()(pre,label)

2.5 交叉熵損失函數(Cross Entropy)

2.5.1 交叉熵損失函數簡介

交叉熵損失函數可以用來學習模型分布與訓練分布之間的差異,一般用作分類問題,數學含義為預測輸入樣本屬于某一類別的概率。

2.5.2 公式介紹

?y^為真實分類y的概率值

2.5.3?代碼實現==>以類的形式進行封裝,需要對其實例化后再使用

import torch ### pre:模型的輸出值 ### label:模型的目標值 loss = torch.nn.CrossEntropyLoss()(pre,label)

2.5.4 圖像理解

接下來,我們從圖形的角度,分析交叉熵函數,加深大家的理解。首先,還是寫出單個樣本的交叉熵損失函數:


我們知道,當 y = 1 時:

?這時候,L 與預測輸出的關系如下圖所示:

看了 L 的圖形,簡單明了!橫坐標是預測輸出,縱坐標是交叉熵損失函數 L。顯然,預測輸出越接近真實樣本標簽 1,損失函數 L 越小;預測輸出越接近 0,L 越大。因此,函數的變化趨勢完全符合實際需要的情況。

當 y = 0 時:

這時候,L 與預測輸出的關系如下圖所示:

同樣,預測輸出越接近真實樣本標簽 0,損失函數 L 越小;預測函數越接近 1,L 越大。函數的變化趨勢也完全符合實際需要的情況。

從上面兩種圖,可以幫助我們對交叉熵損失函數有更直觀的理解。無論真實樣本標簽 y 是 0 還是 1,L 都表征了預測輸出與 y 的差距。

從圖形中我們可以發現:預測輸出與 y 差得越多,L 的值越大,也就是說對當前模型的 “ 懲罰 ” 越大,而且是非線性增大,是一種類似指數增長的級別。這是由 log 函數本身的特性所決定的。這樣的好處是模型會傾向于讓預測輸出更接近真實樣本標簽 y。

2.6 其他損失函數

2.6.1?SmoothL1Loss

SmoothL1Loss:平滑版的L1損失函數。此損失函數對于異常點的敏感性不如MSE-Loss。在某些情況下(如Fast R-CNN模型中),它可以防止梯度“爆炸”。這個損失函數也稱為Huber loss。

2.6.2?NLLLoss

NLLLoss:負對數似然損失函數,在分類任務中經常使用。

2.6.3?NLLLoss22d

NLLLoss22d:計算圖片的負對數似然損失函數,即對每個像素計算NLLLoss。

2.6.4?KLDivLoss

KLDivLoss:計算KL散度損失函數。

2.6.5?BCELoss

BCELoss:計算真實標簽與預測值之間的二進制交叉熵。

2.6.6?BCEWithLogitsLoss

BCEWithLogitsLoss:帶有Sigmoid激活函數層的BCELoss,即計算target與Sigmoid(output)之間的二進制交叉熵。

2.6.7?MarginRankingLoss

MarginRankingLoss:按照一個特定的方法計算損失。計算給定輸入x、x(一維張量)和對應的標y(一維張量,取值為-1或1)之間的損失值。如果y=1,那么第一個輸入的值應該大于第二個輸入的值;如果y=-1,則相反。

2.6.8?HingeEmbeddingLoss

HingeEmbeddingLoss:用來測量兩個輸入是否相似,使用L1距離。計算給定一個輸入x(二維張量)和對應的標簽y(一維張量,取值為-1或1)之間的損失值。

2.6.9?MultiLabelMarginLoss

MultiLabelMarginLoss:計算多標簽分類的基于間隔的損失函數(hinge loss)。計算給定一個輸入x(二維張量)和對應的標簽y(二維張量)之間的損失值。其中,y表示最小批次中樣本類別的索引。

2.6.10?SoftMarginLoss

SoftMarginLoss:用來優化二分類的邏輯損失。計算給定一個輸入x(二維張量)和對應的標簽y(一維張量,取值為-1或1)之間的損失值。

2.6.11?MultiLabelSoftMarginLoss

MultiLabelSoftMarginLoss:基于輸入x(二維張量)和目標y(二維張量)的最大交叉熵,優化多標簽分類(one-versus-al)的損失。

2.6.12?CosineEmbeddingLoss

CosineEmbeddingLoss:使用余弦距離測量兩個輸入是否相似,一般用于學習非線性embedding或者半監督學習。

2.6.13?MultiMarginLoss

MultiMarginLoss:用來計算多分類任務的hinge loss。輸入是x(二維張量)和y(一維張量)。其中y代表類別的索引。

2.7 匯總

用輸入標簽數據的類型來選取損失函數

如果蝓入是無界的實數值,那么損失函數使用平方差

如果輸入標簽是位矢量(分類標識),那么使用交叉熵會更適合。

總結

以上是生活随笔為你收集整理的【Pytorch神经网络理论篇】 09 神经网络模块中的损失函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。