什么损失函数适合在 x,y 输入数组中找到“兴趣点”

人工智能 神经网络 卷积神经网络 目标函数
2021-11-14 11:58:54

我正在研究神经网络是否适合在一组元组(比如长度和一些传感器值)中检测“兴趣点”(POI)。POI 本质上是不遵循模式的值的快速变化。因此,如果我们的传感器值线性增加,然后突然跳跃 200%,这将是一个 POI。

这是我正在使用的数据的示例:

[(1,10),(2,11),(3,14),(5,24),(6.5,25), (7,26), (8,45)]

在此示例中,假设“(3,14)”、“(5,24)”和“(8,45)”是兴趣点。所以我正在尝试设计一个可以检测这些的神经网络。

我首先创建了一个静态输入长度为 500 个元素的一维卷积层。

在几个隐藏层之后,我应用了一个 sigmoid 函数,它提供了一个 0 和 1 的列表作为输出,其中 1 表示集合中的一个 POI。

我正在尝试解决这种方法的几个问题。

在分类损失函数中[1,0,0,1,0,0],例如,如果预期输出是完全不准确的,则输出将被视为完全不准确,[0,1,0,0,1,0]而实际上这是相当准确的,因为预测的 POI 非常接近真实的 POI。

所以我想做的是找到一个损失函数来优化神经网络。

到目前为止,我已经尝试过:

  • Binary Cross Entropy:我读到这对于分类输入可以属于多个类的位置很有用。我尝试了这一点,认为每个 POI 本质上都是一个“类别”。但这似乎不起作用,我认为这是因为我上面提到的。
  • 平均绝对误差:这似乎得到了稍微好一点的结果,但经过仔细检查后,它似乎不是很准确,并且几乎可以一致地预测一组 POI。

我已经尝试了其他几个,但运气不佳。

什么损失函数更适合这个?

我尝试的另一个输出不是输出 0 和 1,而是应该只返回兴趣点的索引,比如 3、5 8。这会是更好的输出吗?

1个回答

您不必使用机器学习来解决问题。

  1. 统一每个数据输入(或每条曲线)的尺度,如归一化为[0,1](不必要)。

  2. 计算每对点的斜率(是的2-是的1)(X2-X1).

  3. 设置阈值。比较两个相邻斜率之间的差异,差异超过阈值被标记为 POI。

这不是更简单吗?

如果一定要用CNN解决问题,我能想到的就是你先收集(或画)一堆曲线,提前标记POI,然后再喂给CNN模型。