当前位置: 首页 > 知识库问答 >
问题:

当有许多输出时使用哪个损失函数?

司马高韵
2023-03-14

类似于1000 x 1像素图像的数据来自设备。图像中的某处可能有1个、2个或更多对象。

我要建立一个神经网络来检测物体。我想做1000个输出。每个输出将指示该输出中是否有对象。建议我使用哪个损失函数。

在我看来,“分类交叉熵”是不合适的,因为例如:在训练数据中,我将指示对象位于10和90像素。神经网络会预测物体在11和89像素。这不是什么大损失。但是对于网络来说,它会像预测500和900像素的物体一样损失。

这样的情况适合什么损失函数?我在利用Keras

共有3个答案

蔡晨
2023-03-14

正如Siddharth所说,您将使用两个损失函数,因为您有一个回归问题和一个分类问题。看见https://www.youtube.com/watch?v=GSwYGkTfOKk更多细节。特别要注意这张幻灯片:

也就是说,第一个任务简单地分类对象是否存在(逻辑回归损失),第二个任务查找边界框(平方误差损失)。

楚威
2023-03-14

您可以使用二进制交叉熵损失,并将距离地面真实值最近的n个箱子设置为标签。

例如,您有10个像素,地面真相标签为3,您选择了3个邻居。

在典型的分类交叉熵中,您可以使用一热编码向量将标签设置为跟随。

[0 0 1 0 0 0 0 0 0 0]

在我建议的解决方案中,您将使用

[0 1 1 1 0 0 0 0 0 0]

或者它可以是这样,基本上施加高斯而不是平面标签。

[0 0.5 1 0.5 0 0 0 0 0 0]

评论中建议的对象检测体系结构也基本上以我描述的方式运行。除了他们使用量化方案

[0 1 0 0 0 0 0 0](实际像素)

[- - 1 - - - - 0 - -] (组分为2组,每组5个。您的网络现在只有两个输出。将此视为合并阶段,因为实际像素属于组1。此子网络使用二进制交叉熵)。

[1 0](第一分类网络输出)

[-1 0](这个第二阶段可以被认为是增量网络,它从第一阶段获取分类的bin值并输出一个修正值,因为第一个bin锚定在索引2,你需要预测-1才能将其移动到索引1。该网络使用平滑的l1损失进行训练)。

现在马上就有问题了,如果组1中有两个对象呢?这是一个不幸的问题,同样存在于目标检测体系结构中。解决此问题的方法是定义稍微移动和缩放的箱子(或锚)位置。这样,您最多可以在一个像素处检测N个对象,其中N是在该像素处定义的锚数量。

丁绪
2023-03-14

在目标检测中,主要有两个任务:定位和分类。因此,我们有两个任务的损失-一个是本地化,另一个是分类损失。它是使用IoU(并集上的交点)计算的。这里有更多细节。

 类似资料:
  • 损失函数 1. 二分类 在二分类问题中,目标$y$只能取两个值。在本节笔记中,我们将展示如何建模这个问题,通过令$y \in{-1,+1}$,这里如果这个例子是正类的一个元素,我们说$y$是$1$,如果这个例子是负类的一个元素,我们说$y = - 1$。和往常一样,我们假设我们的输入特征$x \in \mathbb{R}^{n}$。 和我们处理监督学习问题的标准方法一样,我们首先为我们的假设类选择

  • 本文向大家介绍gbdt的损失函数?相关面试题,主要包含被问及gbdt的损失函数?时的应答技巧和注意事项,需要的朋友参考一下 gbdt可以用多种损失函数来进行拟合回归树

  • 本文向大家介绍Lasso的损失函数相关面试题,主要包含被问及Lasso的损失函数时的应答技巧和注意事项,需要的朋友参考一下 参考回答:

  • 本文向大家介绍LR的损失函数相关面试题,主要包含被问及LR的损失函数时的应答技巧和注意事项,需要的朋友参考一下 参考回答: M为样本个数,为模型对样本i的预测结果,为样本i的真实标签。

  • 本文向大家介绍SVM的损失函数相关面试题,主要包含被问及SVM的损失函数时的应答技巧和注意事项,需要的朋友参考一下 参考回答:

  • 损失函数的使用 损失函数(或称目标函数、优化评分函数)是编译模型时所需的两个参数之一: model.compile(loss='mean_squared_error', optimizer='sgd') from keras import losses model.compile(loss=losses.mean_squared_error, optimizer='sgd') 你可以传递一个