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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

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

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

1 訓練模型的步驟與方法

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

2 神經(jīng)網(wǎng)絡模塊中的損失函數(shù)

2.1 損失函數(shù)定義

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

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

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

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

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

2.3 L2損失函數(shù)

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

2.4 均值平方差損失(MSE)

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

2.4.1 MSE的公式表述

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

2.4.2 注釋

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

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

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

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

2.5.1 交叉熵損失函數(shù)簡介

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

2.5.2 公式介紹

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

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

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

2.5.4 圖像理解

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


我們知道,當 y = 1 時:

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

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

當 y = 0 時:

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

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

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

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

2.6 其他損失函數(shù)

2.6.1?SmoothL1Loss

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

2.6.2?NLLLoss

NLLLoss:負對數(shù)似然損失函數(shù),在分類任務中經(jīng)常使用。

2.6.3?NLLLoss22d

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

2.6.4?KLDivLoss

KLDivLoss:計算KL散度損失函數(shù)。

2.6.5?BCELoss

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

2.6.6?BCEWithLogitsLoss

BCEWithLogitsLoss:帶有Sigmoid激活函數(shù)層的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:計算多標簽分類的基于間隔的損失函數(shù)(hinge loss)。計算給定一個輸入x(二維張量)和對應的標簽y(二維張量)之間的損失值。其中,y表示最小批次中樣本類別的索引。

2.6.10?SoftMarginLoss

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

2.6.11?MultiLabelSoftMarginLoss

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

2.6.12?CosineEmbeddingLoss

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

2.6.13?MultiMarginLoss

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

2.7 匯總

用輸入標簽數(shù)據(jù)的類型來選取損失函數(shù)

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

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

總結

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。