用于三元组损失训练的自定义精度函数

Posted

技术标签:

【中文标题】用于三元组损失训练的自定义精度函数【英文标题】:Custom accuracy function for triplet loss training 【发布时间】:2020-11-07 03:42:52 【问题描述】:

我正在尝试使用 tensorflow 和 keras 训练三元组损失模型。 我正在使用 VGG16 模型从我的日期集中创建 2622 个嵌入。

我使用 tfa.losses.TripletSemiHardLoss 作为我的损失函数。 我想在训练过程中加入某种准确度函数,因为我觉得只跟踪损失是不够的。 我知道我可以在模型“编译”函数中使用带有“metrics”参数的自定义函数,但我不确定我需要什么样的函数来进行三元组损失训练。 我想到了用tensorflow实现的semi_hard_triplet_loss函数,将正三元组的数量除以所有有效三元组的数量。

accuracy = 1-(positive_triplet/all_valid_triplets)

其中正三元组表示所有三元组的损失 > 0。

这是正确的方法吗?

【问题讨论】:

【参考方案1】:

我认为这是一种方法。

最终,当所有三元组都被挖掘出来时,要更新的三元组数量将为 0。在您的公式中,它将转换为 progress=1

因此,像这样定义伪进度(不是真正的准确性)对我来说是有意义的。

我不知道如何从TripletSemiHardLossTripletHardLoss 检索此信息。

【讨论】:

以上是关于用于三元组损失训练的自定义精度函数的主要内容,如果未能解决你的问题,请参考以下文章

Keras 中基于输入数据的自定义损失函数

用于嘈杂的不可微损失函数的自定义 Tensorflow 优化器

Keras 中带有附加变量输入的自定义损失/目标函数

我正在训练一个 keras 神经网络。我想要一个由 y_true*y_pred 给出的自定义损失函数。这是允许的吗?

ValueError:未知损失函数:使用我的自定义损失函数加载模型时的focal_loss_fixed

Keras 上的自定义损失函数