三元组损失 ¶
- class torch.nn.TripletMarginLoss(margin=1.0, p=2.0, eps=1e-06, swap=False, size_average=None, reduce=None, reduction='mean')[source][source]¶
创建一个测量三元组损失的准则,给定输入张量 、 、 和一个大于 的间隔。这用于测量样本之间的相对相似度。三元组由 a、p 和 n(即锚、正例和负例)组成。所有输入张量的形状应为 。
论文中详细描述了距离交换,该论文为 V. Balntas, E. Riba 等人撰写的《使用三元损失的浅层卷积特征描述符学习》。
每个样本在迷你批次中的损失函数为:
其中
使用指定的 p 值计算范数,并添加一个小常数 以增加数值稳定性。
参见
TripletMarginWithDistanceLoss
,它使用自定义距离函数计算输入张量的三元组损失。- 参数:
边距(float,可选)- 默认: 。
p(int,可选)- 对距离的范数度。默认: 。
eps(float,可选)- 用于数值稳定性的小常数。默认: 。
交换(bool,可选)- 距离交换在 V. Balntas,E. Riba 等人的论文《使用三元组损失的浅层卷积特征描述符学习》中详细描述。默认:
False
。size_average(布尔值,可选)- 已弃用(参见
reduction
)。默认情况下,损失会在批次的每个损失元素上平均。注意,对于某些损失,每个样本可能有多个元素。如果字段size_average
设置为False
,则损失将改为对每个 minibatch 求和。当reduce
为False
时,将被忽略。默认:True
reduce(布尔值,可选)- 已弃用(参见
reduction
)。默认情况下,损失会在每个 minibatch 的观测上平均或求和,具体取决于size_average
。当reduce
为False
时,将返回每个批次的损失,并忽略size_average
。默认:True
reduction(字符串,可选)- 指定应用于输出的缩减方式:
'none'
|'mean'
|'sum'
。'none'
:不应用缩减,'mean'
:输出总和将除以输出中的元素数量,'sum'
:输出将被求和。注意:size_average
和reduce
正在被弃用,在此期间,指定这两个参数之一将覆盖reduction
。默认:'mean'
- 形状:
输入: 或 ,其中 是向量维度。
输出:如果
reduction
是'none'
且输入形状为 ,则形状为 的张量;否则为标量。
示例:
>>> triplet_loss = nn.TripletMarginLoss(margin=1.0, p=2, eps=1e-7) >>> anchor = torch.randn(100, 128, requires_grad=True) >>> positive = torch.randn(100, 128, requires_grad=True) >>> negative = torch.randn(100, 128, requires_grad=True) >>> output = triplet_loss(anchor, positive, negative) >>> output.backward()