【问题标题】:caffe: A CNN with two loss layers and two different label setscaffe:具有两个损失层和两个不同标签集的 CNN
【发布时间】:2018-09-06 03:17:06
【问题描述】:

我有兴趣拥有一个具有两个损失层的深度 CNN,每个损失层都有自己独立的标签集。例如,假设一个 10 层的 CNN,loss1 使用 label1 位于第 5 层,然后 loss2 使用 label2 位于最后一层。

注意:label1(loss1)可以被认为是预处理步骤,以减轻 CNN 解决 label2(loss2 即真实标签)的任务。

问题:据我所知,caffe 损失层自动使用“标签”(在我的 .lmdb 数据集中)。如何让它在loss1中使用“label1”,在loss2中使用“label2”?

更新:所以我接受了 Shai 的建议来使用 HDF5。这是我到目前为止的进展(仅给出输入和输出层):

layer {
  name: "data"
  type: "HDF5Data"
  top: "data"
  top: "label1"
  top: "label2"
  include {
    phase: TEST
  }
  hdf5_data_param {
    source: "data/2048_1e3_0.00/2048_1e3_0.00_s_val_list.txt"
  }
}
layer {
  name: "data"
  type: "HDF5Data"
  top: "data"
  top: "label1"
  top: "label2"
  include {
    phase: TRAIN
  }
  hdf5_data_param {
    source: "data/2048_1e3_0.00/2048_1e3_0.00_s_train_list.txt"
  }

...

layer {
  name: "loss1"
  type: "EuclideanLoss"
  bottom: "ampl"
  bottom: "label1"
  top: "loss1"
}

...

layer {
  name: "loss2"
  type: "EuclideanLoss"
  bottom: "ampl"
  bottom: "label2"
  top: "loss2"
}

我的方向正确吗?

【问题讨论】:

  • 感谢谢。您提供的“此答案”链接并未解决有关使用多个标签使用多个损失的问题。所以我决定通过“更新”让我的问题更清楚。另外,我提供了一部分代码,询问我是否应该这样做。这有什么问题?
  • 答案 I linked to 展示了如何为 caffe 创建 HDF5 数据。您应该修改它有多个标签,而不仅仅是XY。是的,你所采取的方向似乎导致了一个很好的解决方案。
  • 感谢您的帮助。

标签: neural-network deep-learning caffe conv-neural-network pycaffe


【解决方案1】:

AFAIK Caffe 将二进制 Datums 存储在 lmdb 中。 Datum 的定义方式将其限制为每个输入图像的 单个 整数 label。因此,在您的场景中使用带有 lmdb 的 "Data" 层可能非常棘手。

另一方面,您可以改用"HDF5Data" 层:该层更加灵活,可以轻松地为每个输入图像提供多个标签。这里有几个关于如何使用这个输入层的例子,参见,例如this answer.

【讨论】:

    猜你喜欢
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    相关资源
    最近更新 更多