如何使 softmax 层适应多个标签?

数据挖掘 神经网络 图像分类
2021-10-11 10:24:10

问题:一张图片有多个标签。给定一组带标签的图像,如何调整 softmax 层?

我的点子:

  • 将多个标签编码为 0-1 个变量。使用逻辑回归作为输出层。
  • 选择 softmax 输出中的前 X 个标签。但是我不知道
    1. 如何确定阈值。
    2. 如何修改预训练网络中的代码。比方说
{
      "op": "null",
      "param": {},
      "name": "softmax_label",
      "inputs": [],
      "backward_source_id": -1
    },
    {
      "op": "Softmax",
      "param": {"grad_scale": "1"},
      "name": "softmax",
      "inputs": [[510, 0], [511, 0]],
      "backward_source_id": -1
    }

对教程的任何建议表示赞赏。我从 ESL 一书中获得了一些理论背景。

3个回答

我不知道您的代码中发生了什么,但您似乎很接近:要获得多个标签,只需用逻辑层(或将实数映射到概率的其他东西)替换 softmax 输出层,然后优化交叉熵。这样,您将有一个与每个标签相关联的概率,这样它们跨标签的总和不再需要加到统一中。

在最后一层用 sigmoid 激活函数替换 softmax 激活。Sigmoid 将分数转换为 [-1 到 1] 的范围。然后,您可以在此分数值上应用阈值。

  1. 在训练时,您必须考虑该图像的多个基本事实。

  2. 然后在评估时,您将获得图像的多个预测,这与 softmax 不同,它确保每个类的概率之和等于 1。

在过去的几天里,我已经阅读了相关的教程。

有两种可能的解决方案

  1. 将问题转化为多个多分类问题。
  2. 使用可以处理多标签问题的算法。

在软件方面:

  1. 提取除最后一层以外的网络参数。
  2. 使用 SVM(或其他方法)来处理最后一层。

参考:

  1. 斯坦福计算机视觉在线课程
  2. 咖啡教程