参数:
margin(float)-
默认值为
1
,容忍的差距。
size_average(bool)-
当
reduce=True
时有效。为
True
时,返回的
loss
为平均值;为
False
时,返回的各样本的
loss
之和。
reduce(bool)-
返回值是否为标量,默认为
True
。
11. MultiLabelMarginLoss
class
torch.nn.MultiLabelMarginLoss
(
size_average=None
,
reduce=None
,
reduction='elementwise_mean'
)
功能:
用于一个样本属于多个类别时的分类任务。例如一个四分类任务,样本
x
属于第
0类,第
1
类,不属于第
2
类,第
3
类。
计算公式:
x[y[j]] 表示 样
本 x 所属类的输出值,
x[i]
表示不等于该类的输出值。
参数:
size_average(bool)-
当
reduce=True
时有效。为
True
时,返回的
loss
为平均值;为
False时,返回的各样本的
loss
之和。
reduce(bool)-
返回值是否为标量,默认为
True
。
Input: (C) or (N,C) where N is the batch size and C is the number of classes.
Target: (C) or (N,C), same shape as the input.
12. SmoothL1Loss
class
torch.nn.SmoothL1Loss
(
size_average=None
,
reduce=None
,
reduction='elementwise_mean'
)
功能:
计算平滑
L1
损失,属于
Huber Loss
中的一种
(
因为参数
δ
固定为
1
了
)
。
补充:
Huber Loss
常用于回归问题,其最大的特点是对离群点(
outliers
)、噪声不敏感,具有较强的鲁棒性。
公式为:
理解为,当误差绝对值小于
δ
,采用
L2
损失;若大于
δ
,采用
L1
损失。
回到
SmoothL1Loss
,这是
δ
=1
时的
Huber Loss
。
计算公式为:
对应红色线:
参数:
size_average(bool)-
当
reduce=True
时有效。为
True
时,返回的
loss
为平均值;为
False时,返回的各样本的
loss
之和。
reduce(bool)-
返回值是否为标量,默认为
True
。
13. SoftMarginLoss
class
torch.nn.SoftMarginLoss
(
size_average=None
,
reduce=None
,
reduction='elementwise_mean'
)
功能:
Creates a criterion that optimizes a two-class classification logistic loss between input tensor x and target tensor y (containing 1 or -1).
(暂时看不懂怎么用,有了解的朋友欢迎补充!)
计算公式:
参数:
size_average(bool)-
当
reduce=True
时有效。为
True
时,返回的
loss
为平均值;为
False时,返回的各样本的
loss
之和。
reduce(bool)-
返回值是否为标量,默认为
True
。
14. MultiLabelSoftMarginLoss
class
torch.nn.MultiLabelSoftMarginLoss
(
weight=None
,
size_average=None
,
reduce=None
,
reduction='elementwise_mean'
)
功能:
SoftMarginLoss
多标签版本,
a multi-label one-versus-all loss based on max-entropy,
计算公式:
参数:
weight(Tensor)-
为每个类别的
loss
设置权值。
weight
必须是
float
类型的
tensor
,其长度要于类别
C
一致,即每一个类别都要设置有
weight
。
15. CosineEmbeddingLoss
class
torch.nn.CosineEmbeddingLoss
(
margin=0
,
size_average=None
,
reduce=None
,
reduction='elementwise_mean'
)
功能:
用
Cosine
函数来衡量两个输入是否相似。
used for learning nonlinear embeddings or semi-supervised
。
计算公式:
参数:
margin(float)-
: 取值范围
[-1,1]
, 推荐设置范围
[0, 0.5]
size_average(bool)-
当
reduce=True
时有效。为
True
时,返回的
loss
为平均值;为
False时,返回的各样本的
loss
之和。
reduce(bool)-
返回值是否为标量,默认为
True
。
16. MultiMarginLoss
class
torch.nn.MultiMarginLoss
(
p=1
,
margin=1
,
weight=None
,
size_average=None
,
reduce=None
,
reduction='elementwise_mean'
)
功能:
计算多分类的折页损失。
计算公式:
其中,
0≤y≤x.size(1) ; i == 0 to x.size(0) and i≠y; p==1 or p ==2; w[y]
为各类别的weight
。
参数:
p(int)-
默认值为
1
,仅可选
1
或者
2
。
margin(float)-
默认值为
1
weight(Tensor)-
为每个类别的
loss
设置权值。
weight
必须是
float
类型的
tensor
,其长度要于类别
C
一致,即每一个类别都要设置有
weight
。
size_average(bool)-
当
reduce=True
时有效。为
True
时,返回的
loss
为平均值;为
False时,返回的各样本的
loss
之和。
reduce(bool)-
返回值是否为标量,默认为
True
。
17. TripletMarginLoss
class
torch.nn.TripletMarginLoss
(
margin=1.0
,
p=2
,
eps=1e-06
,
swap=False
,
size_average=None
,
reduce=None
,
reduction='elementwise_mean'
)
功能:
计算三元组损失,人脸验证中常用。
如下图
Anchor
、
Negative
、
Positive
,目标是让
Positive
元和
Anchor
元之间的距离尽可能的小,
Positive
元和
Negative
元之间的距离尽可能的大。
从公式上看,
Anchor
元和
Positive
元之间的距离加上一个
threshold
之后,要小于Anchor
元与
Negative
元之间的距离。
计算公式:
参数:
margin(float)-
默认值为
1
p(int)-
Th
e norm degree
,默认值为
2
swap(float)– The distance swap is described in detail in the paper Learning shallow convolutional feature descriptors with triplet losses by V. Balntas, E. Riba et al. Default: False
size_average(bool)-
当
reduce=True
时有效。为
True
时,返回的
loss
为平均值;为
False时,返回的各样本的
loss
之和。
reduce(bool)-
返回值是否为标量,默认为
True
。