Pytorch 常用損失函式
基本用法:
criterion = LossCriterion() # 建構函式有自己的引數
loss = criterion(x, y) # 呼叫標準時也有引數
計算出來的結果已經對mini-batch取了平均
分類和迴歸的區別:在於輸出變數的型別。
定量輸出稱為迴歸,或者說是連續變數預測;
定性輸出稱為分類,或者說是離散變數預測。
1、nn.L1Loss()
nn.L1Loss(size_average=True)
建立一個衡量輸入x(模型預測輸出) 和 目標y之間差的絕對值的平均值的標準。
l
o
s
s
(
x
,
y
)
=
1
n
∑
∣
x
i
−
y
i
∣
loss(x,y)=\frac {1}{n} \sum|x_i−y_i|
loss(x,y)=n1∑∣xi−yi∣
x 和 y 可以是任意形狀,每個包含n個元素。
對n個元素對應的差值的絕對值求和,得出來的結果除以n。
如果在建立L1Loss例項的時候在建構函式中傳入size_average=False,那麼求出來的絕對值的和將不會除以n。
2、nn.MSELoss()
nn.MSELoss(size_average=True)
建立一個衡量輸入x(模型預測輸出)和目標y之間均方誤差標準。
l o s s ( x , y ) = 1 n ∑ ( x i − y i ) 2 loss(x,y)=\frac {1}{n}\sum(xi−yi)2 loss(x,y)=n1∑(xi−yi)2
x 和 y 可以是任意形狀,每個包含n個元素。
對n個元素對應的差值的絕對值求和,得出來的結果除以n。
如果在建立MSELoss例項的時候在建構函式中傳入size_average=False,那麼求出來的平方和將不會除以n。
3、nn.CrossEntropyLoss()
nn.CrossEntropyLoss(weight=None, size_average=True)
此標準將LogSoftMax和NLLLoss整合到一個類中。當訓練一個多類分類器的時候,這個方法是十分有用的。
- weight(tensor): 1-D tensor,n個元素,分別代表n類的權重,如果你的訓練樣本很不均衡的話,是非常有用的。預設值為None。
呼叫時引數:
- input : 包含每個類的得分,2-D tensor,shape為 batch*n
- target: 大小為 n 的 1-D tensor,包含類別的索引(0到 n-1)。
Loss可以表述為以下形式:
l o s s ( x , c l a s s ) = − l o g e x p ( x [ c l a s s ] ) ∑ j e x p ( x [ j ] ) ) = − x [ c l a s s ] + l o g ( ∑ j e x p ( x [ j ] ) ) loss(x,class)=−log \frac {exp(x[class])}{\sum_j exp(x[j]))} =−x[class]+log(\sum_j exp(x[j])) loss(x,class)=−log∑jexp(x[j]))exp(x[class])=−x[class]+log(j∑exp(x[j]))
當 w e i g h t weight weight 引數被指定的時候, l o s s loss loss 的計算公式變為:
l o s s ( x , c l a s s ) = w e i g h t s [ c l a s s ] ∗ ( − x [ c l a s s ] + l o g ( ∑ j e x p ( x [ j ] ) ) ) loss(x,class)=weights[class]∗(−x[class]+log(\sum_j exp(x[j]))) loss(x,class)=weights[class]∗(−x[class]+log(j∑exp(x[j])))
計算出的loss對mini-batch的大小取了平均。
形狀(shape):
- Input:(N,C) C 是類別的數量
- Target: (N) :N是mini-batch的大小, 0 ⩽ t a r g e t s [ i ] ⩽ C − 1 0 \leqslant targets[i] \leqslant C-1 0⩽targets[i]⩽C−1
4、nn.BCELoss()
nn.BCELoss(weight=None, size_average=True)
計算 target 與 output 之間的二分類交叉熵。
l o s s ( o , t ) = − 1 n ∑ i ( t [ i ] l o g ( o [ i ] ) + ( 1 − t [ i ] ) l o g ( 1 − o [ i ] ) ) loss(o,t)=-\frac{1}{n}\sum_i(t[i] log(o[i])+(1-t[i]) log(1-o[i])) loss(o,t)=−n1i∑(t[i]log(o[i])+(1−t[i])log(1−o[i]))
如果weight被指定 :
l o s s ( o , t ) = − 1 n ∑ i w e i g h t s [ i ] ∗ ( t [ i ] l o g ( o [ i ] ) + ( 1 − t [ i ] ) ∗ l o g ( 1 − o [ i ] ) ) loss(o,t)=-\frac{1}{n}\sum_iweights[i] \ast (t[i] log(o[i])+(1-t[i])* log(1-o[i])) loss(o,t)=−n1i∑weights[i]∗(t[i]log(o[i])+(1−t[i])∗log(1−o[i]))
這個用於計算 auto-encoder 的 reconstruction error。注意 0 ⩽ t a r g e t [ i ] ⩽ 1 0\leqslant target[i] \leqslant1 0⩽target[i]⩽1。
預設情況下,loss會基於element平均,如果size_average=False的話,loss會被累加。
5、nn.MarginRankingLoss()
nn.MarginRankingLoss(margin=0, size_average=True)
建立一個標準,給定輸入 x 1 x1 x1, x 2 x2 x2 兩個1-D mini-batch Tensor’s,和一個 y y y(1-D mini-batch tensor) , y y y 裡面的值只能是-1或1。
如果 y=1,代表第一個輸入的值應該大於第二個輸入的值,如果y=-1的話,則相反。
mini-batch中每個樣本的loss的計算公式如下:
l o s s ( x , y ) = m a x ( 0 , − y ∗ ( x 1 − x 2 ) + m a r g i n ) loss(x,y)=max(0,−y∗(x1−x2)+margin) loss(x,y)=max(0,−y∗(x1−x2)+margin)
如果size_average=True,那麼求出的loss將會對mini-batch求平均;
反之,求出的loss會累加。預設情況下,size_average=True。
6、nn.HingeEmbeddingLoss()
nn.HingeEmbeddingLoss(size_average=True)
給定一個輸入 x x x (2-D mini-batch tensor)和對應的 標籤 y y y (1-D tensor,1,-1),此函式用來計算之間的損失值。這個loss通常用來測量兩個輸入是否相似,即:使用L1 成對距離。典型是用在學習非線性 embedding或者半監督學習中:
第n次小批量樣品的損失函式為
l n = { x n if: y n = 1 m a x ( 0 , Δ − x n ) if: y n = − 1 l_n = \begin{cases} x_n & \text{if: }y_n=1 \\ max(0, \Delta - x_n) & \text{if: } y_n=-1 \end{cases} ln={xnmax(0,Δ−xn)if: yn=1if: yn=−1
總損失函式是:
ℓ
(
x
,
y
)
=
{
m
e
a
n
(
L
)
if: reduction= ’mean’
s
u
m
(
L
)
if: reduction=’sum’
ℓ(x,y)=\begin{cases}mean(L) & \text{if: reduction= 'mean'} \\ sum(L) & \text{if: reduction='sum' } \end{cases}
ℓ(x,y)={mean(L)sum(L)if: reduction= ’mean’if: reduction=’sum’
x
x
x 和
y
y
y 可以是任意形狀,且都有n的元素,loss的求和操作作用在所有的元素上,然後除以n。如果您不想除以n的話,可以通過設定size_average=False。margin的預設值為1,可以通過建構函式來設定。
7、nn.MultiLabelMarginLoss()
nn.MultiLabelMarginLoss(size_average=True)
計算多標籤分類的 hinge loss(margin-based loss) ,計算loss時需要兩個輸入:
- input x:2-D mini-batch Tensor
- output y: 2-D tensor表示mini-batch中樣本類別的索引
l o s s ( x , y ) = 1 x . s i z e ( 0 ) ∑ i = 0 , j = 0 I , J m a x ( 0 , 1 − ( x [ y [ j ] ] − x [ i ] ) ) loss(x,y)=\frac{1}{x.size(0)} \sum_{i=0,j=0}^{I,J}max(0,1−(x[y[j]]−x[i])) loss(x,y)=x.size(0)1i=0,j=0∑I,Jmax(0,1−(x[y[j]]−x[i]))
其中 I = x . s i z e ( 0 ) , J = y . s i z e ( 0 ) I=x.size(0),J=y.size(0) I=x.size(0),J=y.size(0)。對於所有的 i i i 和 j j j,滿足 y [ j ] ≠ 0 , i ≠ y [ j ] y[j]\neq0, i \neq y[j] y[j]=0,i=y[j]
x x x 和 y y y 必須具有同樣的 size。這個標準僅考慮了第一個非零 y [ j ] t a r g e t s y[j] targets y[j]targets 此標準允許了,對於每個樣本來說,可以有多個類別。
8、nn.SmoothL1Loss
nn.SmoothL1Loss(size_average=True)
平滑版L1 loss。loss 的公式如下:
l o s s ( x , y ) = 1 n ∑ i 0.5 ∗ ( x i − y i ) 2 if: ∣ x i − y i ∣ < ∣ x i − y i ∣ − 0.5 loss(x,y)=\frac{1}{n}\sum_i{0.5∗(x_i−y_i)^2} \qquad \text{if: } |x_i−y_i|< |x_i−y_i|−0.5 loss(x,y)=n1i∑0.5∗(xi−yi)2if: ∣xi−yi∣<∣xi−yi∣−0.5
此loss對於異常點的敏感性不如MSELoss,而且,在某些情況下防止了梯度爆炸,(參照 Fast R-CNN)。這個loss有時也被稱為 Huber loss。x 和 y 可以是任何包含n個元素的tensor。預設情況下,求出來的loss會除以n,可以通過設定size_average=True 使 loss累加。
9、nn.SoftMarginLoss
nn.SoftMarginLoss(size_average=True)
建立一個標準,用來優化2分類的 logistic loss。輸入為 x(一個 2-D mini-batch Tensor)和 目標y(一個包含1或 -1的Tensor)。
l o s s ( x , y ) = 1 x . n e l e m e n t ∑ i l o g ( 1 + e x p ( − y [ i ] ∗ x [ i ] ) ) loss(x,y)=\frac{1}{x.nelement} \sum_i log(1+exp(−y[i]∗x[i])) loss(x,y)=x.nelement1i∑log(1+exp(−y[i]∗x[i]))
如果求出的loss不想被平均可以通過設定 size_average=False。
相關文章
- PyTorch:損失函式loss functionPyTorch函式Function
- Pytorch中的損失函式PyTorch函式
- 損失函式函式
- 3D高斯損失函式(1)單純損失函式3D函式
- 損失函式綜述函式
- Triplet Loss 損失函式函式
- 例項解釋NLLLoss損失函式與CrossEntropyLoss損失函式的關係函式ROS
- TensorFlow損失函式專題函式
- DDMP中的損失函式函式
- Pytorch_第六篇_深度學習 (DeepLearning) 基礎 [2]---神經網路常用的損失函式PyTorch深度學習神經網路函式
- 談談交叉熵損失函式熵函式
- 邏輯迴歸 損失函式邏輯迴歸函式
- SSD的損失函式設計函式
- 聊聊損失函式1. 噪聲魯棒損失函式簡析 & 程式碼實現函式
- 詳解常見的損失函式函式
- 2.3邏輯迴歸損失函式邏輯迴歸函式
- 深度學習之PyTorch實戰(5)——對CrossEntropyLoss損失函式的理解與學習深度學習PyTorchROS函式
- TensorFlow筆記-06-神經網路優化-損失函式,自定義損失函式,交叉熵筆記神經網路優化函式熵
- 邏輯迴歸損失函式(cost function)邏輯迴歸函式Function
- 圖示Softmax及交叉熵損失函式熵函式
- 焦點損失函式 Focal Loss 與 GHM函式
- 邏輯迴歸:損失函式與梯度下降邏輯迴歸函式梯度
- 人臉識別損失函式疏理與分析函式
- 理解神經網路的不同損失函式神經網路函式
- 3D高斯損失函式(2)新增BA最佳化和結構損失3D函式
- 換個角度看GAN:另一種損失函式函式
- 神經網路基礎部件-損失函式詳解神經網路函式
- pytorch模型定義常用函式以及resnet模型修改案例PyTorch模型函式
- 機器學習大牛最常用的5個迴歸損失函式,你知道幾個?機器學習函式
- 梯度提升二三事:怎麼來自定義損失函式?梯度函式
- 一種基於均值不等式的Listwise損失函式函式
- tensorflow2 自定義損失函式使用的隱藏坑函式
- 【機器學習基礎】常見損失函式總結機器學習函式
- Mysql 常用函式(1)- 常用函式彙總MySql函式
- pytorch擬合sin函式PyTorch函式
- pytorch tensor的基本函式PyTorch函式
- 常用函式函式
- 深度人臉識別中不同損失函式的效能對比函式