pytorch框架学习---损失函数

损失函数是什么?
损失函数衡量模型输出与真实标签的差异

损失函数、代价函数、目标函数的关系?
损失函数:计算目标是单个样本
代价函数:计算目标是整个样本,计算每个样本的损失函数求和再取均值。
目标函数:在代价函数的基础上加上正则化项,目的是为了防止过拟合,造成代价函数小但泛化能力差。

下面介绍Pytorch中的十四种损失函数

损失函数 功能 注意事项 主要参数 使用场景 计算公式
nn.CrossEntropyLoss nn.LogSoftMax()与nn.NLLLoss()结合,进行交叉熵计算 - weight:各类别的loss设置取值
ignoe_index:忽略某个类别
reduction:计算模式,可为none/sum/mean
常用于分类任务 H ( P , Q ) = − ∑ i = 1 N P ( x i ) l o g Q ( x i ) H(P,Q) = -\sum_{i=1}^NP(x_i)logQ(x_i) H(P,Q)=i=1NP(xi)logQ(xi)
nn.NLLLoss 实现负对数似然函数中的负号功能 - weight:各类别的loss设置取值
ignoe_index:忽略某个类别
reduction:计算模式,可为none/sum/mean
常用于分类任务 l ( x , y ) = L = { l 1 , . . . , l N } l , l n = − w y n x n , y n l(x,y) = L = \{l_1, ..., l_N\}^l, l_n= -w_{y_n}x_{n,y_n} l(x,y)=L={l1,...,lN}l,ln=wynxn,yn
n.BCELoss 二分类交叉熵 - weight:各类别的loss设置取值
ignoe_index:忽略某个类别
reduction:计算模式,可为none/sum/mean
常用于分类任务 l n = − w n [ y n ⋅ l o g x n + ( 1 − y n ) ⋅ l o g ( 1 − x n ) ] l_n = -w_n[y_n \cdot logx_n + (1-y_n) \cdot log(1-x_n)] ln=wn[ynlogxn+(1yn)log(1xn)]
nn.BCEWithLogitsLoss 结合Sigmoid与二分类交叉熵 网络最后不加sigmoid函数 pos:正样本的权值
weight:各类别的loss设置取值
ignoe_index:忽略某个类别
reduction:计算模式,可为none/sum/mean
常用于分类任务 l n = − w n [ y n ⋅ l o g σ ( x n ) + ( 1 − y n ) ⋅ l o g ( 1 − σ ( x n ) ) ] l_n = -w_n[y_n \cdot log\sigma(x_n) + (1-y_n) \cdot log(1-\sigma(x_n))] ln=wn[ynlogσ(xn)+(1yn)log(1σ(xn))]
nn.L1Loss 计算inputs与target之差的绝对值 - reduction:计算模式,可为none/sum/mean 常用于回归任务 l n = a b s ( x n , y n ) l_n = abs(x_n, y_n) ln=abs(xn,yn)
nn.MSELoss 计算inputs与target之差的平方 - reduction:计算模式,可为none/sum/mean 常用于回归任务 l n = ( x n − y n ) 2 l_n = (x_n - y_n)^2 ln=(xnyn)2
nn.SmoothL1Loss 对L1Loss进行平滑 - reduction:计算模式,可为none/sum/mean 常用于回归任务 z i = { 0.5 ( x i − y i ) 2 , i f   a b s ( x i , y i ) < 1 a b s ( x i , y i ) − 0.5 , o t h e r w i s e z_i=\begin{cases} 0.5(x_i - y_i)^2 , \qquad if \ abs(x_i, y_i) < 1 \\ abs(x_i, y_i) -0.5, \qquad otherwise \end{cases} zi={0.5(xiyi)2,if abs(xi,yi)<1abs(xi,yi)0.5,otherwise
nn.PoissonNLLLoss 泊松分布的负对数似然损失函数 - log_input :输入是否为对数形式,决定计算公式
full :计算所有loss,默认为False
eps :修正项,避免log(input)为nan
常用于回归任务 log_input = True
loss(input, target) = exp(input) - target *input
log_input = False
loss(input, target) = input - target * log(input+eps)
nn.KLDivLoss 计算KLD(divergence),KL散度,相对熵 需提前将输入计算 log-probabilities,如通过nn.logsoftmax() reduction :none/sum/mean/batchmean
batchmean- batchsize维度求平均值
用于连续分布的的距离度量,并且对离散采用的连续输出空间进行回归很有用 D K L ( P ∥ Q ) = E x   p [ l o g P ( x ) − l o g Q ( X ) ] = ∑ i = 1 N P ( x i ) ( l o g P ( x i ) − l o g Q ( x i ) ) D_{KL}(P \| Q)= E_{x~p[logP(x) - logQ(X)]}\\ =\sum_{i=1}^NP(x_i)(logP(x_i) - logQ(x_i)) DKL(PQ)=Ex p[logP(x)logQ(X)]=i=1NP(xi)(logP(xi)logQ(xi))

l n = y n ⋅ ( l o g y n − x n ) l_n = y_n \cdot (logy_n - x_n) ln=yn(logynxn)
nn.MarginRankingLoss 计算两个向量之间的相似度
y = 1时, 希望x1比x2大,当x1>x2时,不产生loss
y = -1时,希望x2比x1大,当x2>x1时,不产生loss
该方法计算两组数据之间的差异,返回一个n*n的 loss 矩阵 margin :边界值,x1与x2之间的差异值
reduction :计算模式,可为none/sum/mean
常用于排序任务 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*(x_1 - x_2) + margin) loss(x,y)=max(0,y(x1x2)+margin)
nn.MultiLabelMarginLoss - - - 常用于图像的多分类任务, -
nn.SoftMarginLoss 计算二分类的logistic损失 - reduction :计算模式,可为none/sum/mean 常用于分类任务 l o s s ( x , y ) = ∑ i l o g ( 1 + e x p ( − y [ i ] ∗ x [ i ] ) ) x . n e l e m e n t ( ) loss(x,y) = \sum_i \frac {log(1 +exp(-y[i] * x[i]))} {x.nelement()} loss(x,y)=ix.nelement()log(1+exp(y[i]x[i]))
nn.MultiLabelSoftMarginLoss SoftMarginLoss多标签版本 - weight:各类别的loss设置权值
reduction :计算模式,可为none/sum/mean
常用于图像的多分类任务 l o s s ( x , y ) = − 1 C ∗ ∑ i y [ i ] ∗ l o g ( 1 + e x p ( − x [ i [ ) ) − 1 ) + ( 1 − y [ i ] ) ∗ l o g ( e x p ( − x [ i ] ) 1 + e x p ( − x [ i ] ) ) ) loss(x,y) = - \frac 1 C * \sum_i y[i] * log(1+exp(-x[i[))^{-1}) + (1-y[i]) * log(\frac {exp(-x[i] )} {1+exp(-x[i]))} ) loss(x,y)=C1iy[i]log(1+exp(x[i[))1)+(1y[i])log(1+exp(x[i]))exp(x[i]))
nn.MultiMarginLoss 计算多分类的折页损失 - p :可选1或2
weight:各类别的loss设置权值
margin :边界值
reduction :计算模式,可为none/sum/mean
常用于分类任务 l o s s ( x , y ) = ∑ i m a x ( 0 , m a r g i n − x [ y ] + x [ i ] ) ) p x . s i z e ( 0 ) loss(x,y) = \frac {\sum_i max(0, margin - x[y] + x[i]))^p} {x.size(0)} loss(x,y)=x.size(0)imax(0,marginx[y]+x[i]))p
nn.TripletMarginLoss 计算三元组损失 - p :可选1或2
margin :边界值
reduction :计算模式,可为none/sum/mean
常用于人脸识别任务 L ( a , p , n ) = m a x { d ( a i , p i ) − d ( a i , p i ) + m a r g i n , 0 } L(a,p,n) = max\{d(a_i, p_i) - d(a_i, p_i) + margin, 0\} L(a,p,n)=max{d(ai,pi)d(ai,pi)+margin,0}

d ( x i , p i ) = ∥ x i − y i ∥ p d(x_i, p_i) = \| x_i - y_i\|_p d(xi,pi)=xiyip
nn.HingeEmbeddingLoss 计算两个输入的相似性 输入x应为两个输入之差的绝对值 margin :边界值
reduction :计算模式,可为none/sum/mean
常用于非线性embedding和半监督学习 l n = { x n , i f   y n = 1 m a x { 0 , Δ − x n } , i f y n = − 1 l_n = \begin{cases} x_n , \qquad if \ y_n = 1 \\ max\{0, \Delta - x_n\}, \quad if y_n = -1 \end{cases} ln={xn,if yn=1max{0,Δxn},ifyn=1
nn.CosineEmbeddingLoss 采用余弦相似度计算两个输入的相似性 - margin :可取值[-1, 1] , 推荐为[0, 0.5]
reduction :计算模式,可为none/sum/mean
常用于非线性embedding和半监督学习 l n = { 1 − c o s ( x 1 , x 2 ) , i f   y n = 1 m a x { 0 , c o s ( x 1 , x 2 ) − m a r g i n } , i f y n = − 1 l_n = \begin{cases} 1-cos(x_1, x_2) , \qquad if \ y_n = 1 \\ max\{0, cos(x_1,x_2) - margin\}, \quad if y_n = -1 \end{cases} ln={1cos(x1,x2),if yn=1max{0,cos(x1,x2)margin},ifyn=1
nn.CTCLoss 计算CTC损失 - blank :blank label
zero_infinity :无穷大的值或梯度置0
reduction :计算模式,可为none/sum/mean
解决时序类数据的分类 -

你可能感兴趣的:(深度学习,#,计算机视觉)